有人可以解释当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"));
}
}
真的要简单得多。