2

しばらくの間、これに苦労してきました。私の方法は次のようになります。

public Frame(){
            JFrame window = new JFrame();
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            window.setSize(800, 600);

            JPanel panel = new JPanel(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();
              gbc.gridheight =3;
              gbc.gridwidth = 3;


            JButton upButt = new JButton();//Buttons.upButton();
              gbc.gridx = 1;
              gbc.gridy = 0;
              panel.add(upButt, gbc);

            JButton downButt = new JButton();
              gbc.gridx = 1;
              gbc.gridy = 2;
              panel.add(downButt, gbc);

            JButton leftButt = new JButton();//Buttons.leftButton();
              gbc.gridx=0;
              gbc.gridy = 1;
              panel.add(leftButt, gbc);

            JButton rightButt = new JButton();//Buttons.rightButton();
              gbc.gridx =2;
              gbc.gridy = 1;
              panel.add(rightButt, gbc);

            window.add(panel);
            window.setVisible(true);

           }

私の理解から-Javaドキュメントを読んで再読した後。-これにより、十字型のボタンが4つ表示されます。ただし、これは当てはまらず、ボタンはウィンドウの中央で互いに積み重ねられています。私は何が欠けていますか?

4

3 に答える 3

4

なぜgridheightとgridwidth3を使用しているのですか?控えめに言っても、それは少し奇妙です。

私のお金のために、私は物事を単純化し、単純なGridLayoutを使用します:

import java.awt.GridLayout;
import javax.swing.*;

public class Foo003 {
   public static void main(String[] args) {
      JButton upButton = new JButton("Up");
      JButton downButton = new JButton("Down");
      JButton leftButton = new JButton("Left");
      JButton rightButton = new JButton("Right");
      JComponent[][] components = { 
            { new JLabel(), upButton, new JLabel() },
            { leftButton, new JLabel(), rightButton },
            { new JLabel(), downButton, new JLabel() } };

      JPanel panel = new JPanel(new GridLayout(components.length,
            components[0].length, 8, 8));
      for (int i = 0; i < components.length; i++) {
         for (int j = 0; j < components[i].length; j++) {
            panel.add(components[i][j]);
         }
      }

      int eb = 15;
      panel.setBorder(BorderFactory.createEmptyBorder(eb, eb, eb, eb));

      JFrame frame = new JFrame("Grid e.g.");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(panel);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
}

ここに画像の説明を入力してください

于 2012-08-24T23:46:04.450 に答える
2

あなたは次のような意味です:

ボタンを交差させる

私はとを取り除くだろgridwidthgridheight

public class TestGridBagLayout extends JFrame {

    public TestGridBagLayout() {

        setTitle("Test");
        setLayout(new GridBagLayout());
        setSize(200, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 1;
        gbc.gridy = 0;
        add(createButton(), gbc);

        gbc.gridy = 2;
        add(createButton(), gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        add(createButton(), gbc);

        gbc.gridx = 2;
        add(createButton(), gbc);

        setVisible(true);

    }

    protected JButton createButton() {

        return new JButton("+");

    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        new TestGridBagLayout();

    }
}
于 2012-08-24T23:54:26.950 に答える
0

使用する場合、「このコンポーネントは3行3列を占める必要があります」gridHeightgridWidth言っています。

Java Docから:

gridheight
Specifies the number of cells in a column for the component's display area.

gridwidth
Specifies the number of cells in a row for the component's display area.

ここで、「コンポーネント」とは、パネルに追加されるコンポーネントです。あなたの場合のボタン。

他のポスターが言うように、gridWidthとgridHeightの線を削除すると、すべて問題ないはずです。

于 2012-08-25T00:26:46.530 に答える