(Java) 尝试用 JPanel 中的其他元素格式化多个 JTable 的布局
(Java) Trying to format the layout of multiple JTables with other elements in a JPanel
我一直在 Java 开发一款以口袋妖怪为主题的问答游戏(如果您熟悉的话,可以仿照 Sporcle)。除了程序不同组件的布局外,几乎所有东西都按我想要的方式运行。
我对不同的布局管理器一直不是很好,我不知道如何让它们做我需要的事情。
这是 window 现在的样子:
现在,我稍后会调整字体大小,但表格本身看起来正是我想要的。问题是,我希望它们位于文本字段和按钮之类的下方。这是我将所有组件添加到我的 JPanel 的代码部分:
panel.add(label,FlowLayout.LEFT); //adding the "big question text"
panel.add(answerfield); //adding the JTextField
panel.add(correctAnswerTracker); //adding the "x / 151" text
for(int x = sPanes.length-1; x >=0; x--) //as you keep adding to left, it gets pushed over, so doing it backwards results in the correct order
panel.add(sPanes[x],FlowLayout.LEFT);
//each table is in a scrollPane, and all my scrollPanes are in the array sPanes, so I'm looping through that to add the tables
panel.add(startStopButton); //button that says "Start"
panel.add(exit); //button that says "Exit
panel.add(timer); //the timer
如您所见,添加文本字段和正确答案跟踪器的语句都写在表格的添加语句之前,而表格却在顶部。此外,该循环中的表存在以倒序添加的问题,因此我必须反转循环迭代的方向以使表以正确的顺序出现。我试过使用 setLocation 和 setBounds 之类的东西来让我的组件更多地出现在我想要的地方,但没有任何反应。此外,所有内容都显示在表格下方的一行中(我知道 FlowLayout 就是这样做的),但我将如何准确自定义显示内容的位置?
使用 LayoutManager
或 setLayout(null)
。在后一种情况下,您可以通过调用 setBounds
来移动您的组件。我最近也一直在这样做(不使用 LayoutManager),它非常自由。
用 BorderLayout
将面板包裹在 FlowLayout
的面板周围。将所有应该在表格上方的内容放在一个面板中,并用 BorderLayout.NORTH
添加。将所有应该在表格下方的内容放在另一个面板中,并用 BorderLayout.SOUTH
添加。然后像现在一样将表格放在它们自己的面板中,并添加 BorderLayout.CENTER
.
我一直在 Java 开发一款以口袋妖怪为主题的问答游戏(如果您熟悉的话,可以仿照 Sporcle)。除了程序不同组件的布局外,几乎所有东西都按我想要的方式运行。
我对不同的布局管理器一直不是很好,我不知道如何让它们做我需要的事情。
这是 window 现在的样子:
现在,我稍后会调整字体大小,但表格本身看起来正是我想要的。问题是,我希望它们位于文本字段和按钮之类的下方。这是我将所有组件添加到我的 JPanel 的代码部分:
panel.add(label,FlowLayout.LEFT); //adding the "big question text"
panel.add(answerfield); //adding the JTextField
panel.add(correctAnswerTracker); //adding the "x / 151" text
for(int x = sPanes.length-1; x >=0; x--) //as you keep adding to left, it gets pushed over, so doing it backwards results in the correct order
panel.add(sPanes[x],FlowLayout.LEFT);
//each table is in a scrollPane, and all my scrollPanes are in the array sPanes, so I'm looping through that to add the tables
panel.add(startStopButton); //button that says "Start"
panel.add(exit); //button that says "Exit
panel.add(timer); //the timer
如您所见,添加文本字段和正确答案跟踪器的语句都写在表格的添加语句之前,而表格却在顶部。此外,该循环中的表存在以倒序添加的问题,因此我必须反转循环迭代的方向以使表以正确的顺序出现。我试过使用 setLocation 和 setBounds 之类的东西来让我的组件更多地出现在我想要的地方,但没有任何反应。此外,所有内容都显示在表格下方的一行中(我知道 FlowLayout 就是这样做的),但我将如何准确自定义显示内容的位置?
使用 LayoutManager
或 setLayout(null)
。在后一种情况下,您可以通过调用 setBounds
来移动您的组件。我最近也一直在这样做(不使用 LayoutManager),它非常自由。
用 BorderLayout
将面板包裹在 FlowLayout
的面板周围。将所有应该在表格上方的内容放在一个面板中,并用 BorderLayout.NORTH
添加。将所有应该在表格下方的内容放在另一个面板中,并用 BorderLayout.SOUTH
添加。然后像现在一样将表格放在它们自己的面板中,并添加 BorderLayout.CENTER
.