1

2 つの JPanel を含む非常に単純なフレームの使用に問題がありました。問題は、4 つの JButton を含む Center JPanel のレイアウトにあります。ボタンまたは GridLayout を使用する JPanel に直接、より適切なサイズを設定するにはどうすればよいですか。写真の問題:

alt http://img42.imageshack.us/img42/4601/horrible.jpg !

コードは次のとおりです。

    JTextField textField = new JTextField("");
    textField.setPreferredSize(new Dimension(200,20));
    JPanel textPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    textPanel.add(textField);
    window.add(textPanel, BorderLayout.NORTH);

    JButton plus = new JButton("+");
    //plus.setPreferredSize(new Dimension(50,50)); nothing would change
    JButton minus = new JButton("-");
    JButton per = new JButton("x");
    JButton divide = new JButton("/");
    JPanel prova = new JPanel(new GridLayout(2,2,10,10));
    Dimension d = new Dimension(20,20);
    prova.setMaximumSize(d); // nothing changed!

    prova.add(plus);
    prova.add(minus);
    prova.add(per);
    prova.add(divide);
    window.add(prova, BorderLayout.CENTER);

    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(250,300);
    window.setResizable(false);
    window.setVisible(true);`

良い解決策はどれですか?

敬具

4

2 に答える 2

2

残念ながら、 gridlayout は優先サイズを尊重しません。それでも、グリッド レイアウトに固執したい場合は、次のようなことを試すことができます。

    public static JComponent wrap(JComponent comp)
    {
        JPanel panel = new JPanel();
        panel.add(comp);
        return panel;
    }

そして、prova に直接追加する代わりに、次のように追加します。

            prova.add(wrap(plus)); 
            prova.add(wrap(minus)); 
            prova.add(wrap(per)); 
            prova.add(wrap(divide));

テスト済み、完璧に動作します!! 他にもっといい方法あるけど

于 2010-02-11T08:26:04.870 に答える
0

それが私に起こることです: それは間違いなくグリッドの上端に取り付けられています.

代替テキスト http://img96.imageshack.us/img96/9431/stillnot.jpg

この場合でも、wrap メソッドで、buttons/comp の preferredSize を設定できますが、すべてのボタンは独自のエッジにあります。他のソリューションはどうですか。電卓のボタンをどのように配置しますか? よろしくお願いします。

于 2010-02-11T16:19:25.133 に答える