0

我正在使用 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里面没有 ('GuiJTabbedPane`),正如我想要的那样。

相反,如果我编辑第一个类(Gui)initComponents();JFrame则不会显示,但这次JPanel会。

如何仅使用/编辑这两个类来解决它?

谢谢

4

2 回答 2

1

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

new Gui_JTabbedPane()

现在创建完成initComponents并最终pack()被调用,它进行布局。


一个评论,在构造函数中调用一个可覆盖的(非最终的,非私有的)方法,makeTextPanel是不好的风格,因为它的行为出乎意料:为什么没有字段初始化

于 2013-07-16T12:48:40.110 回答
1

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

我建议您使用 Netbeans,因为它的 GUI 编辑器是一个不错的编辑器。你也可以自己做,但这通常需要更多的测试。

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

于 2013-07-16T12:24:44.793 回答