0

我想创建一个 JTabbedPane,为每个人添加一个 JPanel,然后向 JPanel 添加一些内容:

private void initTabbedPane(JTabbedPane tp)
{
    System.out.println("FestplattenreinigerGraphicalUserInterface::initTabbedPane()");

    // Init Tab-Names
    Vector<String> tabNames = new Vector<String>();
    tabNames.addElement("Startseite");
    tabNames.addElement("Konfiguration");
    tabNames.addElement("Hilfe");

    // Init Tabs
    tp = new JTabbedPane();
    JPanel tmpPanel;
    for(int i = 0; i < tabNames.size(); i++)
    {
        tmpPanel = new JPanel();
        tp.addTab(tabNames.elementAt(i), tmpPanel);
    }
    tp.setFont(new Font("Calibri", Font.BOLD, 11));
    initPanelsInTabbedPane(tp);
    this.getContentPane().add(tp, BorderLayout.CENTER);
}

private void initPanelsInTabbedPane(JTabbedPane tp)
{
    System.out.println("FestplattenreinigerGraphicalUserInterface::initPanelsInTabbedPane()");

    tp.getComponentAt(0).add(new JButton("HELLOSTUPIDJAVAIHATEU"));
}

好吧,它说:找到不兼容的类型:需要 java.awt.Component:javax.swing.JPanel JPanel p = tp.getComponentAt(0);

但是我的书说,有了 Component getComponentAt(int index),我可以访问它的内容,而且我记得 JButton 是一个组件,对吧?那么呢?

4

1 回答 1

1

如果您查看 Javadoc,您会发现它确实JTabbedPane#getComponentAt(index)返回了一个Component. 但是,如果您确定它是 a JPanel(在访问 a 的选项卡时或多或少是这种情况JTabbedPane),您可以随时转换它:

((JPanel) tp.getComponentAt(0)).add(new JButton("come on, Java is nice enough, no ?"));

或者,如果您对 Swing 有所了解,那就更好了

((JCompoonent) tp.getComponentAt(0)).add(new JButton("No, Java and Swing positively rock hard awesome !"));

实际上,JPanel是 的子类JComponent,即

于 2010-11-25T10:25:02.713 回答