Java JButton显示在一台计算机上,但不显示在其他计算机上(BorderLayout)

Java JButton显示在一台计算机上,但不显示在其他计算机上(BorderLayout),java,swing,layout,boxlayout,preferredsize,Java,Swing,Layout,Boxlayout,Preferredsize,我不太会荡秋千。我正在使用EclipseIDE构建一个JFrame,其中包含一个JScrollPane。JScrollPane的内部是一个JPanel-in-Border布局。我尝试使用下面的代码将一个名为submitAnswers的JButton添加到JFrame中,但由于某些原因,该按钮仅出现在我的计算机上的帧末尾,而在其他计算机上没有。我的朋友在他的Mac上尝试了该按钮,我在类似我的单独Windows操作系统上尝试了该按钮。我尝试过的一些解决方案以及其他网站提出的一些不起作用的解决方案包括

我不太会荡秋千。我正在使用EclipseIDE构建一个JFrame,其中包含一个JScrollPane。JScrollPane的内部是一个JPanel-in-Border布局。我尝试使用下面的代码将一个名为submitAnswers的JButton添加到JFrame中,但由于某些原因,该按钮仅出现在我的计算机上的帧末尾,而在其他计算机上没有。我的朋友在他的Mac上尝试了该按钮,我在类似我的单独Windows操作系统上尝试了该按钮。我尝试过的一些解决方案以及其他网站提出的一些不起作用的解决方案包括:

使用pack方法。原因:由于JPanel的首选大小在高度上比JFrame长得多,因此我使用了JScrollPane,打包JFrame只会导致文本在桌面上不可见。 将按钮放在内容JPanel上。原因:我不知道。它不会出现在另一台台式电脑或我朋友的mac电脑上。 使用BorderLayout.SOUTH而不是BorderLayout.PAGE\u END。理由:根本没有变化。按钮在我的计算机上仍然可见,但在其他计算机上不可见。 将按钮直接放在JFrame上。原因:我不知道。 此外,我的JFrame嵌套在一个静态方法中;因此,我只包含了我遇到问题的特定方法的相关代码

以前有人有过这个问题吗?我非常感谢你的洞察力

代码:


我对您的代码进行了一些重构,以使用方法创建GUI的各个组件。您可以找到完整的代码

当我第一次把你的代码复制到我的机器上时,我看到唯一可见的东西就是按钮。因此,我使用自己的方法创建所有组件,然后使用将它们添加到框架和面板中。这使我能够把指令放在北段,按钮放在南段,然后主位放在中段

关于这些部分需要注意的一件事:来自文档

组件根据其首选尺寸和容器尺寸的限制进行布置。北部和南部组件可以水平拉伸;东西向分量可以垂直拉伸;中心构件可以水平和垂直拉伸,以填充剩余的任何空间

因此,应该将要缩放的构件添加到中心部分

现在,我的主要方法如下所示:

public static void main(final String[] args) {
    final JButton submitAnswers = createSubmitAnswersButton();
    final JPanel instructionsPanel = createInstructionsPanel();

    final JPanel testContentPanel = createContentPanel();
    testContentPanel.add(instructionsPanel, BorderLayout.NORTH);
    testContentPanel.add(submitAnswers, BorderLayout.SOUTH);

    final JScrollPane scrollingContentPane = createScrollPaneFor(testContentPanel);

    final JFrame testFrame = createJFrame();
    testFrame.add(scrollingContentPane, BorderLayout.CENTER);

    testFrame.setVisible(true);
}

请编辑您的问题,以包括一个展示您描述的问题的列表;为了保持一致性,请使用UIManager图标,如图所示;1 Java GUI可能必须在多种平台上工作,使用不同的屏幕分辨率和不同的PLAF。因此,它们不利于部件的精确放置或尺寸调整。要为健壮的GUI组织组件,请改为使用布局管理器,或者与布局填充和边框一起使用。那比我的屏幕还高!无论何时,只要面板具有BorderLayout,请确保在添加零部件时使用特定位置,例如BorderLayout.SOUTH。目前,您有“submitAnswersPanel.addsubmitAnswers;”不指定按钮在布局中的显示位置。另外,我将直接将testContentPanel传递给JScrollPane构造函数。如果这些建议中的任何一个解决了您的问题,请告诉我,我会将它们添加为回答“testFrame.getContentPane.addtestScrollPane;”和“testFrame.getContentPane.setLayoutnew BorderLayout;”将getContentPane添加到Hello Dan中,感谢您建议的格式设置。我编辑了代码,将所有内容都设置为BorderLayout,并将按钮放在BorderLayout.SOUTH和BorderLayout.NORTH中的说明上,并将大约4个jLabel、8个JRadioButtons和4个JTables放在BorderLayout.CENTER中。然而,我仍然有同样的问题和更多。首先,该按钮仅显示在我的计算机上,而不显示在另一台桌面计算机上。其次,只有最后2个单选按钮出现在中间。下面是我的代码。框架上的内容窗格是单个面板。它可以使用BorderLayout容纳5个组件。这些组件可以是JPanel,而JPanel又可以容纳更多的组件。如果将JTable添加到框架的BorderLayout.CENTER,然后将另一个JTable添加到框架的同一区域,则最终会丢失组件。您需要将它们添加到各个面板和滚动窗格中,然后嵌套它们,以实现所需的显示。或者使用另一个布局管理器,就像我举了一个嵌套面板的例子一样,非常感谢您的宝贵帮助Dan。现在,所有内容都已正确格式化,但按钮仍然不可见。我使用的格式与您在ideone链接中与我共享的格式完全相同。我使用BorderLayout.SOUTH将按钮放置在testContentPanel上。当你运行程序时,按钮会显示吗?是的,但它在窗口底部,所以你需要滚动到它。
public static void main(final String[] args) {
    final JButton submitAnswers = createSubmitAnswersButton();
    final JPanel instructionsPanel = createInstructionsPanel();

    final JPanel testContentPanel = createContentPanel();
    testContentPanel.add(instructionsPanel, BorderLayout.NORTH);
    testContentPanel.add(submitAnswers, BorderLayout.SOUTH);

    final JScrollPane scrollingContentPane = createScrollPaneFor(testContentPanel);

    final JFrame testFrame = createJFrame();
    testFrame.add(scrollingContentPane, BorderLayout.CENTER);

    testFrame.setVisible(true);
}