1

3x3のグリッドレイアウトを次のように構成したいと思います。

 _ _ _ _ _ _ _ _ _ _ _ _
|        Label         |
| Button Button Button |
|       TextArea       |
|_ _ _ _ _ _ _ _ _ _ _ |

しかし、レイアウトは壊れています。

    public static void main(String[] args){
    JFrame frame = new JFrame("title");
    frame.setSize(400,500);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    GridLayout layout = new GridLayout(3,3);

    JPanel pan0 = new JPanel();
    JPanel pan1 = new JPanel();
    JPanel pan2 = new JPanel();

    pan0.setLayout(layout);
    GridBagConstraints c = new GridBagConstraints();

    JLabel title = new JLabel("title");
    title.setFont(new Font("Serif", Font.BOLD, 40));
    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 3;
    pan0.add(title, c);

    JButton b1 = new JButton("button1");
    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = 1;
    pan0.add(b1, c);

    JButton b2 = new JButton("button2");
    c.gridx = 1;
    c.gridy = 2;
    c.gridwidth = 1;
    pan0.add(b2, c);

    JButton b3 = new JButton("button3");
    c.gridx = 2;
    c.gridy = 3;
    c.gridwidth = 1;
    pan0.add(b3, c);    

    TextArea text1 = new TextArea(15,40);
    c.gridx = 2;
    c.gridy = 0;
    c.gridwidth = 3;
    pan0.add(text1, c);

    frame.add(pan0);
    frame.pack();

  }
}
4

3 に答える 3

6

GridBagConstraintをと一緒に使用していますGridLayout

代わりGridBagLayoutに、同じパッケージにあるを使用してください

于 2011-05-15T19:46:12.880 に答える
3

ラチェットの答えに追加するには、いくつかのグリッド位置が正しくありません。これを試して

    GridBagLayout layout = new GridBagLayout();

    JPanel pan0 = new JPanel();
    JPanel pan1 = new JPanel();
    JPanel pan2 = new JPanel();

    pan0.setLayout(layout);
    GridBagConstraints c = new GridBagConstraints();

    JLabel title = new JLabel("title");
    title.setFont(new Font("Serif", Font.BOLD, 40));
    c.gridx = 0;
    c.gridy = 0;
    c.gridwidth = 3;
    c.fill = GridBagConstraints.CENTER;
    pan0.add(title, c);

    JButton b1 = new JButton("button1");
    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = 1;
    pan0.add(b1, c);

    JButton b2 = new JButton("button2");
    c.gridx = 1;
    c.gridy = 1;
    c.gridwidth = 1;
    pan0.add(b2, c);

    JButton b3 = new JButton("button3");
    c.gridx = 2;
    c.gridy = 1;
    c.gridwidth = 1;
    pan0.add(b3, c);    

    TextArea text1 = new TextArea(15,40);
    c.gridx = 0;
    c.gridy = 2;
    c.gridwidth = 3;
    c.fill = GridBagConstraints.CENTER;
    pan0.add(text1, c);
于 2011-05-15T19:50:16.153 に答える
2

あなたは GridLayout を GridBagLayout と混同していますが、私は垂直方向の配置には BoxLayout を使用し、ボタンには GridLayout を使用します。たとえば、

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

public class Foo003 {
   private static final int BTN_COUNT = 3;
   private static final int VERT_GAP = 10;
   private static final int EB_GAP = 5;
   private static final float TITLE_SIZE = 36f;
   private static final String TITLE_TEXT = "This is my Title";

   private static void createAndShowUI() {

      JLabel titleLabel = new JLabel(TITLE_TEXT, SwingConstants.CENTER);
      titleLabel.setFont(titleLabel.getFont().deriveFont(TITLE_SIZE));
      JPanel titlePanel = new JPanel();
      titlePanel.add(titleLabel);

      JPanel buttonPanel = new JPanel(new GridLayout(1, 0, 5, 0));
      for (int i = 0; i < BTN_COUNT; i++) {
         JButton btn = new JButton("Button " + (i + 1));
         buttonPanel.add(btn);
      }

      JTextArea textArea = new JTextArea(20, 30);

      JPanel mainPanel = new JPanel();
      mainPanel.setBorder(BorderFactory.createEmptyBorder(EB_GAP, EB_GAP, EB_GAP, EB_GAP));
      mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
      mainPanel.add(titlePanel);
      mainPanel.add(Box.createVerticalStrut(VERT_GAP));
      mainPanel.add(buttonPanel);
      mainPanel.add(Box.createVerticalStrut(VERT_GAP));
      mainPanel.add(new JScrollPane(textArea));

      JFrame frame = new JFrame("Foo003");
      frame.getContentPane().add(mainPanel, BorderLayout.CENTER);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}
于 2011-05-15T19:54:26.697 に答える