有人可以解释当JFrame.setvisible设置为true时,我的JTabbedPane不显示的类在做什么吗?

是的,程序的主要方法(我将不在此处介绍)使用事件调度线程来启动ArionGUI。

这是我的JFrame代码:

import javax.swing.*;


public class ArionGUI extends JFrame {

    public ArionGUI() {
        // Set up GUI frame for Arion
        JFrame arionFrame = new JFrame("Arion v 0.01");
        // Add Arion Tabbed Pane
        arionFrame.getContentPane().add(new ArionTabbedPane());
        // Terminate the application when closed
        arionFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        // Set the size of the frame
        arionFrame.setSize(500, 500);
        // Center window
        arionFrame.setLocationRelativeTo(null);
        // Prevent user from resizing window
        arionFrame.setResizable(false);
        // Make Arion frame visible on screen
        arionFrame.setVisible(true);
    }
}


这是我的JTabbedPane代码:

import javax.swing.JTabbedPane;
import javax.swing.JLabel;
import javax.swing.JComponent;

public class ArionTabbedPane extends JComponent {

    JTabbedPane arionTabbedPane;

    public ArionTabbedPane() {

        arionTabbedPane = new JTabbedPane(JTabbedPane.TOP);
        arionTabbedPane.addTab("Characters", new JLabel("This is the characterz tab"));
        arionTabbedPane.addTab("Miscellaneous", new JLabel("This is the miscellaneous tab"));
        add(arionTabbedPane);

    }

}

最佳答案

因为ArionTabbedPane实际上不是选项卡式窗格。这是一个包装。因此,您只是向JFrame中添加了一个组件,而不是TabbedPane。如果您希望能够将ArionTabbed窗格添加到JFrame,则需要扩展JTabbedPane。如果要添加包装的Pane,则需要一个返回对其内部选项卡式窗格的引用的函数,并且需要将其添加到JFrame。像这样:

ArionTabbedPane tabbedPane = new ArionTabbedPane();
arionFrame.getContentPane().add(tabbedPane.getPane());


其中ArionTabbedPane.getPane()如下所示:

Public JTabbedPane getPane() {
return arionTabbedPane;
}


编辑:嗯..您可以做的另一件事是,如果您不想执行任何一项操作,那就是让ArionTabbedPane扩展JPanel而不是JComponent。 Java知道JPanel是一个容器,因此当将其添加到JFrame时,应在JPanel内部检查要显示的内容。您唯一需要更改的就是让ArionTabbedPane扩展JPanel而不是JComponent。

再次编辑,如果扩展JTabbedPane,则需要删除内部JTabbedPane。新的ArionTabbedPane应该看起来像这样:

公共类ArionTabbedPane扩展了JTabbedPane {

public ArionTabbedPane() {
    super(JTabbedPane.TOP); // Calls JTabbedPane's constructor.
    this.addTab("Characters", new JLabel("This is the characterz tab"));
    this.addTab("Miscellaneous", new JLabel("This is the miscellaneous tab"));
}


}

真的要简单得多。

10-02 03:16
查看更多