1

我现在是星期一早上,这意味着我是时候在 Java Swing 上失败了!但说真的,我无法弄清楚为什么我的动态创建的 JTable 在添加到 JFrame 上的 JPanel 后拒绝显示自己,并且非常感谢在隔离这个麻烦问题方面提供的任何帮助。正如您从代码中看到的那样,我调用了十几种不同的方法,但似乎无法找到正确的方法来显示它......也许我错过了一个?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package energizingemerald;


import javax.swing.*;
import java.awt.Dimension;
/**
 *
 * @author Ryan
 */
public class SectionManagerFrame extends javax.swing.JFrame {

    /**
     * Creates new form SectionManagerFrame
     */
    public SectionManagerFrame() {
        initComponents();


    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton_Cancel = new javax.swing.JButton();
        jButton_OK = new javax.swing.JButton();
        jLabel_Title = new javax.swing.JLabel();
        jLabel_Description = new javax.swing.JLabel();
        jTextField_Title = new javax.swing.JTextField();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea_Description = new javax.swing.JTextArea();
        jButton_Remove = new javax.swing.JButton();
        jButton_Add = new javax.swing.JButton();
        jButton_Edit = new javax.swing.JButton();
        jPanel_Grid = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });

        jButton_Cancel.setText("Cancel");
        jButton_Cancel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton_CancelMouseClicked(evt);
            }
        });

        jButton_OK.setText("OK");
        jButton_OK.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jButton_OKMouseClicked(evt);
            }
        });

        jLabel_Title.setText("Review Title:");

        jLabel_Description.setText("Review Description:");

        jTextArea_Description.setColumns(20);
        jTextArea_Description.setRows(5);
        jScrollPane2.setViewportView(jTextArea_Description);

        jButton_Remove.setText("Remove");

        jButton_Add.setText("Add");

        jButton_Edit.setText("Edit");

        javax.swing.GroupLayout jPanel_GridLayout = new javax.swing.GroupLayout(jPanel_Grid);
        jPanel_Grid.setLayout(jPanel_GridLayout);
        jPanel_GridLayout.setHorizontalGroup(
            jPanel_GridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 0, Short.MAX_VALUE)
        );
        jPanel_GridLayout.setVerticalGroup(
            jPanel_GridLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 268, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(122, 122, 122)
                        .addComponent(jButton_Cancel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton_OK)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jPanel_Grid, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jButton_Remove, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jButton_Add, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jButton_Edit, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel_Description)
                            .addComponent(jLabel_Title))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField_Title))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 587, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel_Title)
                    .addComponent(jTextField_Title, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel_Description)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 196, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton_Add)
                        .addGap(3, 3, 3)
                        .addComponent(jButton_Edit)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton_Remove))
                    .addComponent(jPanel_Grid, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton_Cancel)
                    .addComponent(jButton_OK))
                .addContainerGap())
        );

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

    private void jButton_CancelMouseClicked(java.awt.event.MouseEvent evt) {                                            
        // TODO add your handling code here:
        this.setVisible(false);
        this.dispose();
    }                                           

    private void jButton_OKMouseClicked(java.awt.event.MouseEvent evt) {                                        
        // TODO add your handling code here:
    }                                       

    private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        // TODO add your handling code here:
        //ManagerDataModel newManagerDataModel = new ManagerDataModel();
        /*
        newManagerDataModel.AddColumn("Section Name");
        newManagerDataModel.AddColumn("Section Type");
        newManagerDataModel.AddColumn("# of Particles");
        newManagerDataModel.AddRow(new String[]{"Test","Test","Test"});
        */
        jTable_Sections = new JTable(5, 5);
        //jTable_Sections.setPreferredScrollableViewportSize(new Dimension(500, 500));
        jTable_Sections.setMinimumSize(new Dimension(200, 200));
        jTable_Sections.setFillsViewportHeight(true);
        jScrollPane_Sections = new JScrollPane(jTable_Sections);
        jScrollPane_Sections.setMinimumSize(new Dimension(200, 200));
        jPanel_Grid.add(jTable_Sections);
        jPanel_Grid.add(jScrollPane_Sections);
        jPanel_Grid.validate();
        jPanel_Grid.repaint();
        this.validate();
        this.pack();
        this.repaint();


    }                                 
    private JTable jTable_Sections;
    private JScrollPane jScrollPane_Sections;
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(SectionManagerFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(SectionManagerFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(SectionManagerFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(SectionManagerFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new SectionManagerFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton_Add;
    private javax.swing.JButton jButton_Cancel;
    private javax.swing.JButton jButton_Edit;
    private javax.swing.JButton jButton_OK;
    private javax.swing.JButton jButton_Remove;
    private javax.swing.JLabel jLabel_Description;
    private javax.swing.JLabel jLabel_Title;
    private javax.swing.JPanel jPanel_Grid;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextArea jTextArea_Description;
    private javax.swing.JTextField jTextField_Title;
    // End of variables declaration                   
}
4

1 回答 1

4

不是 GroupLayout 的粉丝,但很容易解决这个问题

  • 不要private void formWindowOpened(java.awt.event.WindowEvent evt) {用于将 JComponents 添加到已经可见的容器中,因为调整大小和使用 Swing GUI 闪烁导致

  • 对于 GroupLayout 必须在两个方向上都覆盖 Min、Max 和 PreferredSize,否则会被忽略(默认情况下,请参阅生成的代码)

  • JPanel 在 API 中实现了 FlowLayout,然后包裹在 JScollPane 中的 JTable 在 GroupLayout 中丢失(肯定有解决方案)可能与 setMin、Max 和 PreferredSize 有问题

所需代码(不要用我的下一点解决问题)

private void formWindowOpened(java.awt.event.WindowEvent evt) {
    jTable_Sections = new JTable(5, 5);
    jTable_Sections.setFillsViewportHeight(true);
    jScrollPane_Sections = new JScrollPane(jTable_Sections);
    jPanel_Grid.setLayout(new BorderLayout());
    jPanel_Grid.add(jScrollPane_Sections);
    this.validate();
    this.repaint();
    this.pack();
}
  • 如果所有代码都由您自己编写,则此代码可能约为 50-70 行代码
于 2013-04-22T13:25:57.310 回答