Netbeans - 将JPanel添加到JFrame - 问题

时间:2013-07-16 12:06:41

标签: java jpanel jtabbedpane

我使用netbeans,我创建了一个带有netbeans的JFrame表单,它创建了我编辑过的以下类:

public class Gui extends javax.swing.JFrame {

    public Gui() {
        initComponents();
        this.setVisible(false);
        this.setLocationRelativeTo(null); // finestra al centro dello schermo
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 804, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 536, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                                        
}

之后我创建了一个JPanel课程,我想将其添加到之前的Gui JFrame

public class Gui_JTabbedPane extends JPanel {

    public Gui_JTabbedPane() {                      
        super(new GridLayout(1, 1));

        JTabbedPane tabbedPane = new JTabbedPane();

        JComponent panel1 = makeTextPanel("Try");

        tabbedPane.addTab("Try", panel1, "Does nothing");
        tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
        add(tabbedPane);
        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
    }

   protected JComponent makeTextPanel(String text) {
        JPanel panel = new JPanel(false);
        JLabel filler = new JLabel(text);
        filler.setHorizontalAlignment(JLabel.CENTER);
        panel.setLayout(new GridLayout(1, 1));
        panel.add(filler);
        return panel;
    }
}

所以在我的主要课程中我做到了这一点:

 Gui_JTabbedPane tabbedpane = new Gui_JTabbedPane();
 Gui gui = new Gui();
 gui.add( tabbedpane );
 gui.setVisible(true);

问题在于它只是显示JFrame(Gui)而没有JPanel(&#39; GuiJTabbedPane`),而是我想要的。

相反,如果我编辑第一个类(Gui),则删除initComponents();JFrame未显示,但这次是JPanel

如何解决?只使用/编辑这两个类

由于

2 个答案:

答案 0 :(得分:1)

您应该使用Netbeans来完成所有GUI或手动完成。混合两者通常会导致奇怪的行为,因为默认情况下,Netbeans使用GroupLayout,如果您不使用该布局并使用Netbeans制作的Component中的组件进行组合,则可能不会表演,就像你刚刚经历的一样。 Savior Self得到了部分答案,因为删除Gui JFrame的布局会让一切都很好。

我建议你使用Netbeans,因为它的GUI编辑器很好。你也可以自己做,但一般需要更多的测试。

修改:要将自己的Component添加到Netbeans调色板,您可以访问Tools - &gt; Palette - &gt; Swing Components,这将打开调色板编辑器(使用netbeans 7.3)。从那里,单击Add from Project并选择您的项目,该项目将显示可添加的可用组件。选择你想要的那些。

答案 1 :(得分:1)

在GUI编辑器中添加JPanel,并将属性自定义创建代码设置为:

new Gui_JTabbedPane()

现在,创建在initComponents完成,最后调用pack(),进行布局。


有一种说法,在构造函数中调用一个可覆盖的(非最终的,非私有的)方法,makeTextPanel是一种糟糕的样式,因为它出现意外行为:why aren't fields initialized