【问题标题】:Adding a custom component manually in swing group layout在 Swing 组布局中手动添加自定义组件
【发布时间】:2011-12-25 15:23:07
【问题描述】:

我有这个创建网格的类:

 class GridPane extends JPanel{ 

    public GridPane(int row,int col){

      setLayout(new GridLayout(row,col));

      setBorder(BorderFactory.createEmptyBorder(1,1,1,1));

      for (int i =1; i<=(row*col); i++)
      {
         JPanel pan = new JPanel();
         pan.setBackground(Color.RED);
         pan.setPreferredSize(new Dimension(3,3));
         pan.setBorder(BorderFactory.createLineBorder(Color.BLACK));
         add(pan);
       } 
} 

这会使用组布局设置空主框架:

public MainFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    GroupLayout gl_contentPane = new GroupLayout(contentPane);
    gl_contentPane.setHorizontalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGap(0, 440, Short.MAX_VALUE)
    );
    gl_contentPane.setVerticalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGap(0, 268, Short.MAX_VALUE)
    );
    contentPane.setLayout(gl_contentPane);
}

我对 SWING 不是很有经验,一段时间以来我一直在尝试将 GridPane 对象添加到主框架的右侧。它一直告诉我类似的东西:

java.lang.IllegalStateException: GridPane[,0,0,0x0,invalid,layout=java.awt.GridLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@6ba7508a,flags= 9,maximumSize=,minimumSize=,preferredSize=] 没有附加到垂直/水平组

有人知道发生了什么吗?我应该怎么做才能完成我所需要的?很抱歉发布了很多代码。感谢您的帮助。

【问题讨论】:

    标签: java swing windowbuilder


    【解决方案1】:

    我建议在这种情况下使用BorderLayout

    contentPane = new JPanel();
    contentPane.setLayout(new BorderLayout());
    
    contentPane.add(pan, BorderLayout.LINE_END);
    

    这是完整的代码。我希望这就是您正在寻找的。​​p>

    public class Main {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            frame.setLayout(new BorderLayout());
            GridPane gp = new GridPane(5, 5);
    
            frame.add(gp, BorderLayout.EAST);
    
            frame.setVisible(true);
            frame.setSize(250, 250);
        }
    }
    
    class GridPane extends JPanel {
    
        public GridPane(int row, int col) {
    
            setLayout(new GridLayout(row, col));
            setPreferredSize(new Dimension(125, 125));
            setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
    
            for (int i = 1; i <= (row * col); i++) {
                JPanel pan = new JPanel();
                pan.setBackground(Color.RED);
                pan.setPreferredSize(new Dimension(3, 3));
                pan.setBorder(BorderFactory.createLineBorder(Color.BLACK));
                add(pan);
            }
        }
    }
    

    有用的链接:

    【讨论】:

    • 非常感谢您的工作。这正是我想要的!
    猜你喜欢
    • 2015-10-20
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多