繁体   English   中英

如何在Java的NetBeans IDE中的JTable中将celleditor设置为false?

[英]How to set celleditor false in JTable in netbeans IDE in java?

  1. 这是我的代码,没有错误
  2. 在此代码中,可以编辑每个单元格

如何防止单元格被编辑?

我正在使用DefaultTable模型

    package TableModels;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.table.DefaultTableModel;

    /**
     *
     * @author  DELL
     */
    public class TableModels extends javax.swing.JFrame {

        /** Creates new form TableModels */
        DefaultTableModel dtm;

        String name;
        String age;
        String gender;



        public TableModels() 
        {
        initTables();      

        initComponents();

        initListener();
        }

        /** 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() {

        jScrollPane1 = new javax.swing.JScrollPane();
        table = new javax.swing.JTable();
        lbl_name = new javax.swing.JLabel();
        lbl_age = new javax.swing.JLabel();
        lbl_gender = new javax.swing.JLabel();
        txt_name = new javax.swing.JTextField();
        txt_age = new javax.swing.JTextField();
        txt_gender = new javax.swing.JTextField();
        btn_add = new javax.swing.JButton();
        btn_remove = new javax.swing.JButton();
        btn_update = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        table.setModel(dtm);
        table.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
            tableMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(table);

        lbl_name.setText("Name");

        lbl_age.setText("Age");

        lbl_gender.setText("Gender");

        btn_add.setText("Add");

        btn_remove.setText("Remove");

        btn_update.setText("Update");

        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(37, 37, 37)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lbl_name)
                    .addComponent(lbl_age)
                    .addComponent(lbl_gender))
                .addGap(58, 58, 58)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(txt_name, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)
                    .addComponent(txt_age)
                    .addComponent(txt_gender)
                    .addGroup(layout.createSequentialGroup()
                    .addComponent(btn_add)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(btn_update)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(btn_remove))))
                .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)))
            .addContainerGap(15, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addGap(25, 25, 25)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(lbl_name)
                .addComponent(txt_name, 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(lbl_age)
                .addComponent(txt_age, 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(lbl_gender)
                .addComponent(txt_gender, 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(btn_add)
                .addComponent(btn_remove)
                .addComponent(btn_update))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap())
        );

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

    private void tableMouseClicked(java.awt.event.MouseEvent evt) {
    // TODO add your handling code here:
        txt_name.setText(dtm.getValueAt(table.getSelectedRow(), 0).toString());
        txt_age.setText(dtm.getValueAt(table.getSelectedRow(), 1).toString());
        txt_gender.setText(dtm.getValueAt(table.getSelectedRow(), 2).toString());
    }

        /**
        * @param args the command line arguments
        */

        public void initTables()
        {
        dtm=new DefaultTableModel(0,0);

        dtm.addColumn("Name");
        dtm.addColumn("Age");
        dtm.addColumn("Gender"); 

        }



        public void initListener()
        {
        ActionListener al=new ActionListener()
        {
            public void actionPerformed(ActionEvent ae) 
            {
               if(ae.getSource()==btn_add)
               {
               name=txt_name.getText();
               age=txt_age.getText();
               gender=txt_gender.getText();

               Object data[]=new Object[3];

               data[0]=name;
               data[1]=age;
               data[2]=gender;

               dtm.addRow(data);


               }

               if(ae.getSource()==btn_update)
               {
               name=txt_name.getText();
               age=txt_age.getText();
               gender=txt_gender.getText();

               Object data[]=new Object[3];

               data[0]=name;
               data[1]=age;
               data[2]=gender;

               dtm.setValueAt(data[0], table.getSelectedRow(), 0);
               dtm.setValueAt(data[1], table.getSelectedRow(), 1);
               dtm.setValueAt(data[2], table.getSelectedRow(), 2);
               }
               if(ae.getSource()==btn_remove)
               {
               dtm.removeRow(table.getSelectedRow());
               }
            }
        };
        btn_add.addActionListener(al);
        btn_update.addActionListener(al);
        btn_remove.addActionListener(al);
        }


        public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
            new TableModels().setVisible(true);
            }
        });
        }

        // Variables declaration - do not modify
        private javax.swing.JButton btn_add;
        private javax.swing.JButton btn_remove;
        private javax.swing.JButton btn_update;
        private javax.swing.JScrollPane jScrollPane1;
        private javax.swing.JLabel lbl_age;
        private javax.swing.JLabel lbl_gender;
        private javax.swing.JLabel lbl_name;
        private javax.swing.JTable table;
        private javax.swing.JTextField txt_age;
        private javax.swing.JTextField txt_gender;
        private javax.swing.JTextField txt_name;
        // End of variables declaration

    }

Q1.i看到很多评论要说

            public boolean isCellEditable ( int row, int column )
            {
                return editable;
            }

但是它如何在netbeans中利用它呢?

Q2。另一则评论

      table.setEnabled(false);

但是使用此设置会禁用整个行,是否没有单独选择行?

在您的initTables方法中,当您创建DefaultTableModel的实例时,只需创建一个匿名类并覆盖isCellEditable

public void initTables() {

    dtm=new DefaultTableModel(0,0) {
        @Override
        public boolean isCellEditable(int row, int col) {
            return false;  // every cell is not editable
        }
    };

    dtm.addColumn("Name");
    dtm.addColumn("Age");
    dtm.addColumn("Gender"); 

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM