2013-08-03 33 views
27

Tworzę JFrame i ja nazywam metodę setSize(500, 500). Teraz pożądanym zachowaniem jest to, że JFrame nie powinien być zmieniany przez użytkownika w żadnych warunkach. Albo przez maksymalizację, albo przez przeciągnięcie granic. Powinno to być 500 x 500. Jak mogę to zrobić? Dołączyłem też kod na wypadek, gdybyś mógł mnie lepiej prowadzić.JFrame: Jak wyłączyć zmianę rozmiaru okna?

package com.techpapa;  
    import javax.swing.*; 
    import java.awt.*; 
    import java.awt.event.*; 

    public class MainWindow extends JFrame{ 


private JTextField 
      write; 
private JRadioButton 
      rb1, 
      rb2, 
      rb3; 
private ButtonGroup 
      bg; 

private ActionListener al = new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
     write.setText("JRadioButton : " + ((JRadioButton)e.getSource()).getText()); 
    } 

}; 

public MainWindow(){ 
    //Frame Initialization 
    setSize(500, 500); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLayout(null); 
    setTitle(".:JRadioButton:."); 
    setVisible(true); 

    //Components Initialization 
    write = new JTextField(20); 
    write.setEditable(false); 
    rb1 = new JRadioButton("Male", false); 
    rb1.addActionListener(al); 
    rb2 = new JRadioButton("Female", false); 
    rb2.addActionListener(al); 
    rb3 = new JRadioButton("I don't want to specify", true); 
    rb3.addActionListener(al); 
    bg = new ButtonGroup(); 

    //Add radio buttons to buttongroup 
    bg.add(rb1); bg.add(rb2); bg.add(rb3); 

    //Add to window 
    add(write); 
    write.setBounds(140, 100, 150, 20); 
    write.setDragEnabled(true); 
    add(rb1); 
    rb1.setBounds(180, 200, 100, 30); 
    add(rb2); 
    rb2.setBounds(180, 225, 100, 30); 
    add(rb3); 
    rb3.setBounds(180, 250, 130, 30); 

} 

public static void main(String[] args) { 
    new MainWindow(); 

} 

} 
+0

proszę dlaczego 1. setBound(), 2. non_resizeable 3. setVisible (true) ; musi być ostatnią linią kodu w contructor – mKorbel

+2

Myślałeś o użyciu [** LayoutManagers **] (http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)? Ze względu na to, że jest bardzo potrzebny w Swingu, również nie jest to trudne do nauczenia, może zabiera to czas, gdy ręcznie ustawiasz położenie każdego komponentu. – Azad

Odpowiedz

81

Można użyć prostego połączenia w konstruktorze pod „inicjalizacji ramki”:

setResizable(false); 

Po tej rozmowy, okno nie będzie skalowalny.

12

Zastosowanie setResizable na JFrame

yourFrame.setResizable(false); 

Ale rozszerzenie JFrame jest ogólnie zły pomysł.

+1

-1 rozszerzenie JFrame nie jest złym pomysłem. Ciągle to robię. W każdym razie jest to kwestia preferencji, a nie oficjalnie ogłoszonego faktu, że rozszerzenie "JFrame" jest złym pomysłem. – tbodt

+2

Jest to ogólnie zły projekt. Jeśli nie rozszerzasz funkcji JFrame (co zwykle ma miejsce), posiadanie właściwości JFrame w klasie jest lepszym projektem. – mael

+0

Po prostu uważam, że powinien to być osobisty gust, a nie standard de iure. – tbodt

5

to wschód zastosowanie:

frame.setResizable(false); 
7

Ten kod może być pomóc: [Oba maksymalizacji oraz zapobieganie zmianie rozmiaru na JFrame]

frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
frame.setVisible(true); 
frame.setResizable(false); 
8

Wystarczy napisać jeden wiersz w konstruktorze:

setResizable(false); 

uczyni niemożliwym do zmiany rozmiaru rama.

3

Można użyć this.setResizable(false); lub frameObject.setResizable(false);

3

wszelki wypadek ktoś nie rozumie czas 6th wokół:

setResizable(false);