(Java)试图用JPanel中的其他元素格式化多个JTable的布局

(Java)试图用JPanel中的其他元素格式化多个JTable的布局,java,swing,jtable,jpanel,flowlayout,Java,Swing,Jtable,Jpanel,Flowlayout,我一直在用Java开发一款以口袋妖怪为主题的智力竞赛游戏(如果你熟悉的话,可以模仿Sporcle)。除了程序不同组件的布局外,几乎所有东西都按照我的要求工作 我和不同的布局经理相处得从来都不是很好,我不知道如何让他们做我需要的事情 下面是当前窗口的外观: 现在,我将在稍后讨论字体大小,但表格本身看起来正是我所希望的。问题是,我希望它们位于文本字段、按钮等下面。下面是我将所有组件添加到JPanel的代码部分: panel.add(label,FlowLayout.LEFT); //add

我一直在用Java开发一款以口袋妖怪为主题的智力竞赛游戏(如果你熟悉的话,可以模仿Sporcle)。除了程序不同组件的布局外,几乎所有东西都按照我的要求工作

我和不同的布局经理相处得从来都不是很好,我不知道如何让他们做我需要的事情

下面是当前窗口的外观:

现在,我将在稍后讨论字体大小,但表格本身看起来正是我所希望的。问题是,我希望它们位于文本字段、按钮等下面。下面是我将所有组件添加到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

如您所见,添加文本字段的语句和正确答案跟踪器都写在表的add语句之前,但表位于顶部。此外,循环中的表是以向后顺序添加的,因此我必须反转循环迭代的方向,以使表以正确的顺序显示。我尝试过使用setLocation和setBounds之类的东西来让我的组件更多地放在我想要的地方,但什么也没发生。此外,所有内容都显示在表格下方的一行中(我知道FlowLayout就是这样做的),但我如何才能准确地自定义显示内容的位置呢?

使用
LayoutManager
setLayout(null)
。在后一种情况下,可以通过调用组件上的
setBounds
来移动组件。我最近也在这样做(不使用LayoutManager),这很自由。

使用
LayoutManager
setLayout(null)
。在后一种情况下,可以通过调用组件上的
setBounds
来移动组件。我最近也在做这件事(不使用布局管理器),这很自由。

BorderLayout
包裹面板,用
FlowLayout
包裹面板。将所有应位于面板中表格上方的内容,并使用
BorderLayout.NORTH
添加。将所有应位于另一个面板中表格下方的内容添加到
BorderLayout.SOUTH
。然后像现在一样将表放在它们自己的面板中,并使用
BorderLayout添加它。居中

BorderLayout
将一个面板包裹在那些使用
FlowLayout
的面板周围。将所有应位于面板中表格上方的内容,并使用
BorderLayout.NORTH
添加。将所有应位于另一个面板中表格下方的内容添加到
BorderLayout.SOUTH
。然后像现在一样将表放在它们自己的面板中,并使用
BorderLayout添加它。居中

(1-)不要使用空布局。Swing设计用于布局管理器。除非不使用布局管理器是合理的。重要的是这些东西能起作用。理解一个空布局并不难。你不能不投反对票就让另一种意见站得住脚吗?那只是邪恶,这不是那种情况。完全没有理由考虑零布局。再次,学会正确使用Swing,在这种情况下,你甚至不会考虑将空布局作为答案。代码>重要的是这些东西能工作。
-不,这不是所有的问题。正确的设计才是最重要的,因为它使代码更易于维护和开发。所以你说我必须制作自己的LayoutManager吗?肯定有些布局管理器比其他的更容易使用。嵌套面板有帮助。使用一些常见的第三方布局管理器可以提供帮助。创建自定义布局管理器(为您提供可重用的代码)没有错。关于布局管理的工作原理,有一个定义良好的API。因此,是的,您将放置在ComponentListener中的代码应该移动到适当的布局管理器中。在任何情况下,
对于本问题中所述的简单布局问题,绝对没有理由使用空布局
。使用BorderLayout的简单建议用更少的代码解决了问题。(1-)不要使用空布局。Swing设计用于布局管理器。除非不使用布局管理器是合理的。重要的是这些东西能起作用。理解一个空布局并不难。你不能不投反对票就让另一种意见站得住脚吗?那只是邪恶,这不是那种情况。完全没有理由考虑零布局。再次,学会正确使用Swing,在这种情况下,你甚至不会考虑将空布局作为答案。代码>重要的是这些东西能工作。
-不,这不是所有的问题。正确的设计才是最重要的,因为它使代码更易于维护和开发。所以你说我必须制作自己的LayoutManager吗?肯定有些布局管理器比其他的更容易使用。嵌套面板有帮助。使用一些常见的第三方布局管理器可以提供帮助。创建自定义布局管理器(为您提供可重用的代码)没有错。关于布局管理的工作原理,有一个定义良好的API。因此,是的,您将放置在ComponentListener中的代码应该移动到适当的布局管理器中。在任何情况下,
对于本问题中所述的简单布局问题,绝对没有理由使用空布局
。使用BorderLayout的简单建议用更少的代码解决了这个问题。