1

喂!

我想用 jTable 创建一个 TabbedPane。

设计师: 在此处输入图像描述

JForm 中的构造函数代码:

    initComponents();
    this.add(jTabbedPane1);
    jTabbedPane1.addTab("Test", jPanel1);
    jPanel1.add(jTable1);

自动生成代码:

private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton_add = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setMinimumSize(new java.awt.Dimension(550, 300));

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"dddsds", null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 530, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 287, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(27, Short.MAX_VALUE))
        );

        jButton_add.setText("add");
        jButton_add.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jButton_add.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton_addActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(39, 39, 39)
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 579, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(31, 31, 31)
                        .addComponent(jButton_add)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(28, 28, 28)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jButton_add)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

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

问题:

jTable1 是不可见的,按钮位于 jTabbedPane 下而不是 jPanel 下。

请帮忙

4

2 回答 2

2

您不应该将jTable1两次添加到jPanel1. initComponents()已经通过使用添加jScrollPane1(包括jTable1)。但是在您的构造函数中,您添加了第二次,明确地添加到. 因此,您的构造函数应该如下所示:jPanel1jPanel1LayoutjTable1jPanel1

initComponents();
this.add(jTabbedPane1);
jTabbedPane1.addTab("Test", jPanel1);

请注意,我已删除该行jPanel1.add(jTable1);

那么 jTabbedPane1 也会出现同样的问题,它被添加到内容窗格中两次。

从我看到的生成代码中,我会说您可能对 Netbeans GUI 设计器进行了一些错误的操作,因为jTable1它不在框架的内容窗格内jTabbedPane1,而是直接在框架的内容窗格内。我想你应该从头开始重新设计你的面板,或者至少在设计器中修改你的 UI。

要理解的重要一点是,当您使用GroupLayoutAPI 时,组件会自动添加到其容器中,因此不应显式添加。

实际上,我最好的建议是:不要使用 NetBeans UI 设计器并手动编写 UI(但不要使用GroupLayout太复杂而无法手动编写的 UI)。

于 2011-05-13T07:58:52.233 回答
1

可能有多种原因:1. jPanel1 的布局不正确 2.this容器错误。3. jTable1没有正确初始化。

只需发布更多代码(sscce如果可能的话)

编辑:您应该添加 jScrollPane1 而不是表另请参阅 order layout.setHorizo​​ntalGroup() 您添加 jPanel1、JTabbedPane1、JButton_add。

于 2011-05-13T07:39:58.863 回答