2

JButtonsa の中に3 * 6 の配列がありGridBagLayoutます。ただし、各ボタンのテキストの長さは異なる場合があるため、ボタンの各列の幅はわずかに異なります。それらを同じ幅にするにはどうすればよいですか?

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

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 6; j++)
    {
        buttonConstraints.fill = GridBagConstraints.BOTH;
        buttonConstraints.weightx = 1;
        buttonConstraints.weighty = 1;
        buttonConstraints.gridx = j;
        buttonConstraints.gridy = i;
        buttonPanel.add(buttons[i * 6 + j], buttonConstraints);
    }
}

前もって感謝します。

4

3 に答える 3

5

ただし、各ボタンのテキストの長さは異なる場合があるため、ボタンの各列の幅はわずかに異なります。それらを同じ幅にするにはどうすればよいですか?

  • 簡単な解決策は使用することですGridLayout

  • GridBagLayout列を作成します。各列のディメンションは、最初の行のPrefferedSizeすべてから計算されますJButtons。これらの座標は、現在のコンテナの残りの行に使用されます

編集

ここに画像の説明を入力

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GridFromGridBagLayout {

    private JFrame frame = new JFrame();
    private JPanel panel = new JPanel();

    public GridFromGridBagLayout() {
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        for (int row = 0; row < 6; row++) {
            for (int col = 0; col < 3; col++) {
                JButton b = new JButton("(" + row + ", " + col + ")");
                b.putClientProperty("column", col);
                b.putClientProperty("row", row);
                b.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JButton btn = (JButton) e.getSource();
                        System.out.println("clicked column "
                                + btn.getClientProperty("column")
                                + ", row " + btn.getClientProperty("row"));
                    }
                });
                gbc.gridx = col;
                gbc.gridy = row;
                gbc.gridwidth = gbc.gridheight = 1;
                gbc.fill = GridBagConstraints.BOTH;
                gbc.anchor = GridBagConstraints.NORTHWEST;
                gbc.weightx = 33;
                gbc.weighty = 20;
                panel.add(b, gbc);
            }
        }
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                GridFromGridBagLayout borderPanels = new GridFromGridBagLayout();
            }
        });
    }
}
于 2013-04-25T10:27:31.037 に答える
1

GridBagConstraints を使用すると、幅を等しくまたは必要に応じて設定できます。ヘルプについては、次のリンクに従ってください。

GridBagConstraints

于 2013-04-25T10:09:42.697 に答える