0

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

是的,程序的main方法(这里就不放了)使用事件调度线程来启动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);

    }

}
4

2 回答 2

3

因为 ArionTabbedPane 实际上并不是一个选项卡式窗格。这是一个包装。因此,您只是将一个组件添加到您的 JFrame 而不是 TabbedPane。如果您希望能够将 ArionTabbed 窗格添加到您的 JFrame,它需要扩展 JTabbedPane。如果要添加它要包装的窗格,则需要一个函数来返回对其内部选项卡式窗格的引用,并且需要将其添加到 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"));
}

}

真的简单多了。

于 2009-08-22T03:02:07.297 回答
2

说的是:

替代文字 http://img182.imageshack.us/img182/3585/imagen7e.png

于 2009-08-22T03:07:05.603 回答