java - GridLayout 抛出非法组件位置

标签 java swing layout-manager grid-layout

默认情况下 GridLayout(5,3) 会以这种方式添加组件:

A B C
D E F
G H I
J K L
M N O 

To have the components disposed in the following positions:

A F K
B G L
C H M
D I N
E J O

I have this code:

//imports...

public class GridLayoutProblem {

    private static final int NUM_ROWS = 5, NUM_COLMS=3;
    private JPanel mainPanel = new JPanel();
    private JPanel buttonPannel = new JPanel(new GridLayout(NUM_ROWS, NUM_COLMS));

    private JButton btnA = new JButton("A");
    private JButton btnB = new JButton("B");
    //same with C, D...
    private JButton btnO = new JButton("O");

    private JComponent[] buttons = {
            btnA, btnB, btnC, btnD, btnE,
            btnF, btnG, btnH, btnI, btnJ,
            btnK, btnL, btnM, btnN, btnO
    };

    public GridLayoutProblem(){
        int i=0;
        for (JComponent button : buttons){
            int index = i%NUM_ROWS*NUM_COLMS+i/NUM_ROWS;
            buttonPannel.add(button,index);
            i++;
        }
        mainPanel.add(buttonPannel);
    }
    //...

但结果是: 线程“AWT-EventQueue-0”中出现异常 java.lang.IllegalArgumentException:非法组件位置。

最佳答案

我做了一个快速测试,看来你不能跳过索引并将元素添加到更高的索引。

所以你的选择是做这样的事情,

    for (int i = 0; i < NUM_ROWS*NUM_COLMS; i++){
        int index = i%NUM_COLMS*NUM_ROWS+i/NUM_COLMS; // Note the change in calculation. Just interchange rows and colms from your algo.
        buttonPannel.add(button[index],i);
    }

关于java - GridLayout 抛出非法组件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32227371/

相关文章:

java - 游戏屏幕显示黑屏

java - 游戏开发资源

java - Java 程序中令人困惑的输出

Java 打开一个相对于按钮位置的 JFrame(类似菜单的行为)

java - 如何编辑 JComboBox 并在 JEditorPane 中选择文本

java - 我想使用字符串访问我已经达到的类的方法

java - 解耦 CardLayout 面板

java - 如何动态更改 JFrame 内的 JPanel?

java - 如何将 JPanel 与 JFrame 底部对齐(java swing)

java - GridBagLayout 修复按权重 x/y 设置的空间