2

GridBagLayout を持つ JPanel のコンポーネントの配置に問題があります。JLabel は上部にありますが、中央に配置されておらず、その下の JButton は右端に配置されています。両方を中央に配置する方法はありますか?ここでは、GUI を初期化する方法を示します。

public void initialize() {
        JButton[] moveChoices = new JButton[3];
        JPanel buttonsPanel = new JPanel();
        buttonsPanel.setBackground(Color.green);
        buttonsPanel.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        JLabel welcome = new JLabel();
        for(int i = 0; i < moveChoices.length; i++) {
            moveChoices[i] = new JButton();
            c.gridx = i;
            c.gridy = 1;
            if (i == 0) c.anchor = GridBagConstraints.EAST;
            if (i == 2) c.anchor = GridBagConstraints.WEST;
            moveChoices[i].addActionListener(this);
            buttonsPanel.add(moveChoices[i], c);
        }

        moveChoices[0].setText("Rock");
        moveChoices[1].setText("Paper");
        moveChoices[2].setText("Scissors");

        welcome.setText("Welcome to rock paper scissors! Please enter your move.");
        c.gridy = 0; c.gridx = 1; c.insets = new Insets(10, 0, 0, 0);
        buttonsPanel.add(welcome);
        winText = new JLabel();
        buttonsPanel.add(winText, c);
        this.add(buttonsPanel);
    }
4

1 に答える 1

4

これが機能する形式のコードです。それを機能させるには、次のことを行う必要があります。

  1. すべてのボタンに同じ量の weightx が必要で、それらの間にスペースを均等に分散させます
  2. 見出しには、その行のすべてを取得するためにいくらかの weightx が必要です
  3. fill=BOTH を使用して、すべてのコンポーネントが取得したスペースを埋めるようにします
  4. gridwidth を使用して、見出しに 3 つの列を使用し、ボタンには 1 つしか使用しないようにします
  5. JLabel の水平方向の配置を使用して、見出しをスペース内の中央に配置します

public void initialize() {
    JButton[] moveChoices = new JButton[3];
    JPanel buttonsPanel = new JPanel();
    buttonsPanel.setBackground(Color.green);
    buttonsPanel.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    JLabel welcome = new JLabel();
    c.fill=GridBagConstraints.BOTH;
    c.anchor=GridBagConstraints.CENTER;
    welcome.setText("Welcome to rock paper scissors! Please enter your move.");
    welcome.setHorizontalAlignment(SwingConstants.CENTER);
    c.weightx=1;
    c.gridy = 0; c.gridx = 0; c.insets = new Insets(10, 0, 0, 0);
    c.gridwidth=moveChoices.length;
    c.gridheight=1;
    buttonsPanel.add(welcome,c);
    c.insets=new Insets(0,0,0,0);
    c.gridwidth=1;
    for(int i = 0; i < moveChoices.length; i++) {
        moveChoices[i] = new JButton();
        c.gridx = i;
        c.gridy = 1;
        c.weightx=0.5;
        c.weighty=1;
        moveChoices[i].addActionListener(this);
        buttonsPanel.add(moveChoices[i], c);
    }

    moveChoices[0].setText("Rock");
    moveChoices[1].setText("Paper");
    moveChoices[2].setText("Scissors");
    this.add(buttonsPanel);
}
于 2013-07-24T15:53:22.147 に答える