java - 调整 JScrollPane 和 JTabbedPane 大小的问题

标签 java resize jscrollpane jtabbedpane

我在调整我的 Java 应用程序中的某些组件的大小时遇到​​问题。当我调整主 JFrame 的大小时,它们会保持原来的大小,而不是填充周围的组件。

例如,我在我的程序中有一个 JTabbedPane,位于另一个 JTabbedPane(位于主 JFrame 内)的选项卡中。我使添加到内部 JTabbedPane 的选项卡通过各种 .setPreferredSize() 填充整个周围空间。然后,当我通过拖动窗口的一角来调整 JFrame 的大小时,外部 JTabbedPane 的选项卡大小调整得很好,但位于其中的 JTabbedPane 保持相同的旧大小。

当我使用 JScrollPane 对其进行测试时,同样的事情发生了:由 JScrollPane 调整大小的外部 JTabbedPane 保持相同的大小。

下面是用于创建选项卡式面板的代码,以防您看到我遗漏的明显内容。它是 createEndGamePane() 中的 tabPane/jsp 对象,而不是在调整 JFrame 大小时调整大小。 mainTabPane 会按应有的方式调整大小。

class MyFrame extends JFrame {
   private JTabbedPane mainTabPane;
   private JPanel endGameInfo;
   //....

   private void createTabbedCenterPane(){
       this.mainTabPane = new JTabbedPane();

       this.endGameInfo = new JPanel();

       this.createEndGamePane();

       this.mainTabPane.addTab("Turneringschema", null, this.scheduleHolder, "Spelschemat för turneringen");
       this.mainTabPane.addTab("Grupper & Pooler", null, this.poolInfo, "Information om grupper, lag och pooler");
       this.mainTabPane.addTab("Slutspelsträd", null, this.endGameInfo, "Information om slutspelen");

       this.add(this.mainTabPane, BorderLayout.CENTER);
    }

    private void createEndGamePane(){
        JTabbedPane tabPane = new JTabbedPane();
        tabPane.setPreferredSize(this.endGameInfo.getSize());

        for (int i = 0; i < this.tournament.data.getGroups().size(); i++) {
            EndGame e = this.tournament.data.getEndGames().get(i);;

            //Create the gameTree
            EndGameTreeCanvas gameTree = new EndGameTreeCanvas(e, this.endGameInfo.getSize());

            //Create the ScrollPane
            JScrollPane jsp = new JScrollPane(gameTree);
            jsp.setPreferredSize(tabPane.getSize());
            jsp.setBorder(BorderFactory.createEmptyBorder());


            //Add to the endGameIndo panel
            tabPane.addTab(this.tournament.data.getGroups().get(i).getName(), jsp);
        }

        this.endGameInfo.add(tabPane);
    }

}

最佳答案

如果您希望组件动态调整大小,您应该避免告诉 Swing 它们的大小是多少。相反,这个怎么样:

JTabbedPane tabs = new JTabbedPane();
JScrollPane inner1 = new JScrollPane(myOtherComponent);
tabs.add("Scroll", inner1);
JTabbedPane inner2 = new JTabbedPane();
tabs.add("Tabs", inner2);

仅此而已。没有 setPreferredSize()

关于java - 调整 JScrollPane 和 JTabbedPane 大小的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382060/

相关文章:

java - 如何获取代理类的名称?

java - 应用程序关闭时广播接收器不工作

java - 我应该将 getter/setter 与其变量分组吗?

html - 图像未针对 ipad 屏幕/iphone 模式调整大小

linux - XResizeWindow后,绘制的新窗口内容不显示

java - 如何制作包含点集合的 JScrollPane?

java - Spring 上的 Tomcat 未加载

twitter-bootstrap - Bootstrap 排版和字体大小不会改变

java - JScrollPane 滚动条不可滚动

java - JScrollPane 内的 JPanel JFrame 内的 JPanel 内