2016-11-24 8 views
0

ここでは多くのテーマを読んでいますが、私が望むレイアウトでウィンドウを作ることはできません。 私は単純にすべての私のグラフィックオブジェクトは、ここで最初の写真のように行のスタイルになりたい:http://docs.oracle.com/javase/tutorial/uiswing/layout/box.htmlswing boxLayout not working

私はGridLayoutのを試みたが、それはまだ私の最初のボタンの巨人を作り、私はテキストフィールドを追加すると、その後、それが小さくなってきました小さく!私は、行ごとに一つのボタンを持ちたい

public class TestScrollPane extends JFrame implements ActionListener{ 
Dimension dim = new Dimension(200 , 50); 
JButton button; 
JPanel panel = new JPanel(); 
JScrollPane scrollpane = new JScrollPane(panel); 

public TestScrollPane(){ 
    scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
    this.add(scrollpane); 

    //panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

    this.setSize(300, 400); 
    this.setVisible(true); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setLocationRelativeTo(null); 

    button = new JButton("click me"); 
    button.setPreferredSize(dim); 
    panel.add(button); 
    button.addActionListener(this); 
} 


public void actionPerformed(ActionEvent e){ 
    if(e.getSource() == button){ 

     JTextField txt = new JTextField(); // we add a new button 
     txt.setPreferredSize(dim); 
     panel.add(txt); 

     SwingUtilities.updateComponentTreeUI(this); // refresh jframe 
    } 
} 

public static void main(String[] args){ 
    TestScrollPane test = new TestScrollPane(); 
} 
} 

は、ここですべての輸入せずに私のコードです。

答えて

1

BoxLayoutは、コンポーネントの最小/最大サイズを尊重します。

何らかの理由で、テキストフィールドの最大高さに制限がないため、テキストフィールドにすべての空き領域が確保されます。また

JTextField txt = new JTextField(10); // we add a new button 
//txt.setPreferredSize(dim); // don't hardcode a preferrd size of a component. 
txt.setMaximumSize(txt.getPreferredSize()); 

//SwingUtilities.updateComponentTreeUI(this); // refresh jframe 

は、上記の方法を使用しないでください

だからあなたのような何かを行うことができます。これはLAFの変更に使用されます。

panel.revalidate(); 
panel.repaint(); 
+0

感謝の男は、私はそれがpreferredSizeがについて何かだったことを知っていたが、私はbutton.setPreferredSizeが(薄暗い)と思った;:

代わりにあなたが追加したときに/あなたが使用する必要があります目に見えるGUIからコンポーネントを削除十分でした。 – zogota

+0

@zogota 'しかし、私はそれがbutton.setPreferredSize(dim)と思った。十分だった」 - その声明を取り除くべきだ。任意のコンポーネントの推奨サイズを制御しようとしてはいけません。 – camickr

+0

チップをありがとう!私は_button.setMinimumSize(dim)_を試してみましたが、テキストフィールドも同じでしたが、テキストフィールドを追加すると、ボタンのサイズが小さくなり、_dim_ Dimensionよりも劣る特定のサイズになります。何が起こっている ? – zogota