为什么不会显示此Swing选项卡式窗格?

时间:2009-08-22 02:55:26

标签: java swing class jtabbedpane

当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);

    }

}

2 个答案:

答案 0 :(得分:3)

因为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"));
}

}

真的很简单。

答案 1 :(得分:2)