如何使用网格或框布局来正确显示信息? (例如5名学生/行,3年级/小组)
我尝试过网格布局,效果很好。但是,它没有遵循我指定的行/列。我搞砸了诸如使用包含几个网格布局面板的框布局面板之类的东西。我已经撤消了一切,现在我回到原点。我现在请你帮忙。
Student: Test #1: Test #2: Test #3:
Name 100 50 75
Name 100 50 75
Name 100 50 75
Name 100 50 75
Name 100 50 75
etc...
^我想要实现的例子^
关于我之前所说的内容,在大约2-3行/学生之后,布局发生了变化并将分数分成如下:
Student: Test #1: Test #2: Test #3: Name 100 75 25
Name 100 50 75 Name 75 20 10
Name 50 75 100 Name 100 40 32
如果您有任何想法,请告诉我。
代码:
public class GradesPanel extends JPanel
{
//Constructor
public GradesPanel()
{
final int STUDENTS = 5;
final int GRADES = 3;
JTextField[] gradeField = new JTextField[GRADES];
JPanel[] gradePanel = new JPanel[GRADES];
JLabel[] gradeLabel = new JLabel[GRADES];
JLabel[] header = new JLabel[GRADES + 1];
JLabel[] nameLabel = new JLabel[STUDENTS];
JPanel outerPanel = new JPanel();
outerPanel.setLayout(new BorderLayout());
JPanel innerPanel = new JPanel();
innerPanel.setLayout(new GridLayout(STUDENTS, GRADES));
//Create headers
header[0] = new JLabel("Student:");
innerPanel.add(header[0]);
for(int col = 1; col < (GRADES+1); col++)
{
header[col] = new JLabel("Test #" + (col));
innerPanel.add(header[col]);
}
//Create Label/TextField for each student/grade
for(int row = 0; row < STUDENTS; row++)
{
nameLabel[row] = new JLabel("Name");
innerPanel.add(nameLabel[row]);
for(int col = 0; col < GRADES; col++)
{
//gradeLabel[col] = new JLabel("");
gradeField[col] = new JTextField(3);
//innerPanel.add(gradeLabel[col]);
innerPanel.add(gradeField[col]);
}
}
//outerPanel.setPreferredSize(new Dimension(300,100));
//outerPanel.add(innerPanel, BorderLayout.CENTER);
//add(outerPanel);
add(innerPanel);
}
}
答案 0 :(得分:2)
这不应该使用布局管理器来解决,布局管理器用于帮助您组织组件,而不是显示数据。您的问题是如何显示表格数据,而不是组件,并立即想到两个解决方案:
Font.MONOSPACED
)的JTextArea,并使用String.format("...",...)
格式化数据行,甚至更好: