Cara Mengesahkan Input Sel JTable untuk Nilai Tidak Sah
Apabila mentakrifkan jenis kelas lajur JTable sebagai subkelas nombor tertentu, Swing secara automatik menolak pengguna input yang tidak sesuai dengan jenisnya. Contohnya, jika lajur ditakrifkan sebagai Integer.class, nilai berganda ditolak.
Untuk mencapai kesan yang sama untuk nilai bukan positif, kaedah setValueAt boleh ditindih dalam model jadual. Walau bagaimanapun, pendekatan ini sahaja tidak memberikan maklum balas visual kepada pengguna.
Penyelesaian yang lebih lengkap melibatkan penggunaan editor sel tersuai. Satu editor sedemikian ialah PositiveIntegerCellEditor, yang memanjangkan DefaultCellEditor dan mengatasi kaedah stopCellEditing untuk menyemak nilai negatif atau sifar. Jika nilai tidak sah dikesan, editor menetapkan jidar sel kepada merah dan membatalkan proses pengeditan.
<code class="java">private static class PositiveIntegerCellEditor extends DefaultCellEditor { private static final Border red = new LineBorder(Color.red); private static final Border black = new LineBorder(Color.black); private JTextField textField; public PositiveIntegerCellEditor(JTextField textField) { super(textField); this.textField = textField; this.textField.setHorizontalAlignment(JTextField.RIGHT); } @Override public boolean stopCellEditing() { try { int v = Integer.valueOf(textField.getText()); if (v < 0) { throw new NumberFormatException(); } } catch (NumberFormatException e) { textField.setBorder(red); return false; } return super.stopCellEditing(); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { textField.setBorder(black); return super.getTableCellEditorComponent( table, value, isSelected, row, column); } }</code>
Untuk menggunakan editor ini, editor sel lajur jadual boleh ditetapkan menggunakan kod berikut:
<code class="java">table.getColumnModel().getColumn(columnIndex).setCellEditor(new PositiveIntegerCellEditor(new JTextField()));</code>
Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan Input Sel JTable untuk Nilai Integer Tidak Positif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!