1

現在、JButton の配列があり、それらを JPanel の 2 つの列に均等に分割して配置したいと考えています。したがって、配列に 8 つのボタンがある場合、左の列に 4 つのボタン、右の列に 4 つのボタンがあります。ただし、配列に 7 つのボタンがある場合、左の列には 4 つのボタンがあり、右の列には 3 つのボタンがあります。

私はそのようなシナリオのためのいくつかの基本的なロジックを作成し、作成したコードにロジック エラーがあるかどうか (またはおそらくこれを行うためのより良い方法) を確認したいと考えました。

これが私が思いついたコードです

public class SwingTest {

    public static void main(String[] args) {
        JFrame frame = new JFrame();

        JButton b1 = new JButton();
        b1.setText("Button1");

        JButton b2 = new JButton();
        b2.setText("Button2");

        JButton b3 = new JButton();
        b3.setText("Button3");

        JButton b4 = new JButton();
        b4.setText("Button4");

        JButton b5 = new JButton();
        b5.setText("Button5");

        JButton b6 = new JButton();
        b6.setText("Button6");

        ArrayList<JButton> jButtonList = new ArrayList();
        jButtonList.add(b1);
        jButtonList.add(b2);
        jButtonList.add(b3);
        jButtonList.add(b4);
        jButtonList.add(b5);
        jButtonList.add(b6);

        JPanel panel = new JPanel();
        panel.setLayout(new java.awt.GridBagLayout());

        double halfList = Math.ceil((jButtonList.size() / 2.0));
        int gridX = 0, gridY = 0;

        for(int i = 0; i < jButtonList.size(); i++) {
            GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();

            if(gridY == (int)halfList) {
                gridX++;
                gridY = 0;
            }
            gridBagConstraints.gridx = gridX;
            gridBagConstraints.gridy = gridY;
            gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
            gridBagConstraints.weightx = 1.0;
            gridBagConstraints.weighty = 1.0;
            gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0);
            panel.add(jButtonList.get(i), gridBagConstraints);
            gridY++;
        }
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}

サンプル コードは正常に動作しているように見えますが、問題が発生する可能性はありますか?

4

2 に答える 2

4

2 列のコンストラクターで 0 行を渡す GridLayout で JPanel を使用できます。

JPanel panel = new JPanel(new GridLayout(0 ,2));

これは、コンポーネントを追加すると、常に 2 列を維持しながら、パネルの高さが増加することを意味します。

JButton を追加するコードは次のように単純です。

for(int i = 0; i < jButtonList.size(); i++) {
    panel.add(jButtonList.get(i));
}
于 2012-09-12T16:54:03.893 に答える
1

これに a を使用するのGridBagLayoutは良い計画のようです。

ただし、ボタン構築コードを少しクリーンアップします。100個のボタンが必要になったらどうなりますか? 手動で 100 個のボタンを追加するのは得策ではないようです。ボタンを作成して返すためのパラメータ化されたメソッドと、ボタンを .xml ファイルに追加するためのループがありますArrayList

于 2012-09-12T16:55:05.277 に答える