我有一个非常简单的 Java 程序(见下文)。 GridLayout 有 20 行和 4 列。如您所知,元素应该通过(GridLayout)定义水平添加。但是,我将两个元素(标签)垂直放置在另一个元素之上。
我给它们上色并意识到标签占据了整行,因此产生了垂直效果。但后来我还对每个使用了 setSize(5,5) 来使它们变小,但它们仍然占据整行。关于为什么会发生这种情况以及如何修复/设置较小的尺寸等有什么建议吗?
public class Sam extends JFrame {
public JButton btn_arr;
public Container c;
public JLabel[] lbl = new JLabel[20];
public Sam()
{
c = getContentPane();
c.setLayout(new GridLayout(20,4));
lbl[1] = new JLabel("Column1");
c.add(lbl[1]);
lbl[2] = new JLabel("Column2");
c.add(lbl[2]);
show();
}
public static void main(String[] args)
{
Sam x = new Sam();
x.setVisible(true);
x.setSize(7500,4500);
}
}
最佳答案
您只需向网格中添加两个组件,以便它们将其填满。您需要向网格添加更多组件作为占位符,以便将原始 JLabels 放置在适当的位置,也许是空的 JLabels 或 JPanel。
顺便说一句,您应该避免设置任何 Swing 组件的大小。你现在的7500、4500的尺寸有点偏大了。
顺便说一句,也许您想在这里使用 JTable。
编辑:如果您想要一个具有 4 列和可变行数的 GridLayout,请使用 0
作为 GridLayout 行常量:
c.setLayout(new GridLayout(0, 4));
例如,
import java.awt.*;
import javax.swing.*;
public class Sam extends JFrame {
public static final int COLUMN_COUNT = 4;
public JButton btn_arr;
public Container c;
public JLabel[] lbl = new JLabel[COLUMN_COUNT];
public Sam() {
c = getContentPane();
c.setLayout(new GridLayout(0, COLUMN_COUNT));
for (int i = 0; i < lbl.length; i++) {
lbl[i] = new JLabel("Column " + (i + 1));
c.add(lbl[i]);
}
}
public static void main(String[] args) {
Sam x = new Sam();
x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x.pack();
x.setLocationRelativeTo(null);
x.setVisible(true);
// x.setSize(7500,4500);
}
}
但我仍然想知道 JTable 在这里是否会工作得更好。
关于java - 在 GridLayout 中调整 JLabels 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091812/