Inserted Row Selection jTable
我有一个 JTable 插入一个空行,当我标记出倒数第二列时,这工作正常。我还添加了
需要帮助才能选择最后插入的行。提前致谢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | public class JFrameTable extends javax.swing.JFrame { protected JTable table; public JFrameTable() { initComponents(); } public void setValueAt(int col){ DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); if(col==2){ Vector row = new Vector(); row.add(null); row.add(null); row.add(null); row.add(null); model.addRow(row); } } private class MyKeyListener implements KeyListener { public MyKeyListener() { } @Override public void keyReleased(KeyEvent e) { if(e.getKeyCode()==e.VK_TAB){ int column = jTable1.getSelectedColumn(); int rowCount= jTable1.getRowCount(); int currentRow=jTable1.getSelectedRow(); if(currentRow==rowCount-1) { jTable1.editCellAt(currentRow, column); jTable1.transferFocus(); } if(column==3 && currentRow==rowCount-1){ setValueAt(2); } if(column==3){ currentRow++; column=0; jTable1.editCellAt(currentRow, column); jTable1.transferFocus(); try{ table.setRowSelectionInterval(rowCount-1,rowCount-1); }catch(Exception ek){ System.out.println(ek); } } System.out.println(rowCount); } } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { } } private class MySelectionListener implements ListSelectionListener { public MySelectionListener() { } @Override public void valueChanged(ListSelectionEvent e) { } } private class setTableModelListener implements TableModelListener{ public void tableChanged(TableModelEvent e) { } } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setBackground(new java.awt.Color(75, 107, 221)); jTable1.setFont(new java.awt.Font("SansSerif", 1, 15)); // NOI18N jTable1.setForeground(new java.awt.Color(254, 247, 247)); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null} }, new String [] { "Name","Roll","Stream","Sex" } ) { boolean[] canEdit = new boolean [] { true, true, true, false }; public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jTable1.getModel().addTableModelListener(new setTableModelListener()); jTable1.getTableHeader().setReorderingAllowed(false); jTable1.setRowHeight(20); jTable1.getTableHeader().setBackground(Color.BLACK); jTable1.getTableHeader().setFont(new Font ("SansSerif", Font.BOLD ,15)); jTable1.getTableHeader().setForeground(Color.WHITE); jTable1.getColumnModel().getSelectionModel().addListSelectionListener(new MySelectionListener()); jTable1.addKeyListener(new MyKeyListener()); jTable1.setRowSelectionAllowed(true); jScrollPane1.setViewportView(jTable1); jTable1.getColumnModel().getColumn(0).setResizable(false); jTable1.getColumnModel().getColumn(0).setPreferredWidth(150); jTable1.getColumnModel().getColumn(1).setResizable(false); jTable1.getColumnModel().getColumn(1).setPreferredWidth(50); jTable1.getColumnModel().getColumn(2).setResizable(false); jTable1.getColumnModel().getColumn(2).setPreferredWidth(30); jTable1.getColumnModel().getColumn(3).setResizable(false); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 630, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 205, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 95, Short.MAX_VALUE)) ); pack(); }// </editor-fold> /** * @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(JFrameTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(JFrameTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(JFrameTable.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(JFrameTable.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 JFrameTable().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; // End of variables declaration } |
有几件事不对...
例如...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.util.Vector; import javax.swing.AbstractAction; import javax.swing.ActionMap; import javax.swing.InputMap; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.KeyStroke; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.DefaultTableModel; public class TestTable { public static void main(String[] args) { new TestTable(); } public TestTable() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { ex.printStackTrace(); } DefaultTableModel model = new DefaultTableModel(4, 4); JTable table = new JTable(model); InputMap im = table.getInputMap(); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0),"CellAction"); ActionMap am = table.getActionMap(); am.put("CellAction", new CellAction(table)); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class CellAction extends AbstractAction { private JTable table; public CellAction(JTable table) { this.table = table; } @Override public void actionPerformed(ActionEvent e) { int column = table.getSelectedColumn(); int rowCount = table.getRowCount(); int currentRow = table.getSelectedRow(); if (currentRow == rowCount - 1) { table.editCellAt(currentRow, column); } if (column == 3 && currentRow == rowCount - 1) { DefaultTableModel model = (DefaultTableModel) table.getModel(); Vector row = new Vector(); row.add(null); row.add(null); row.add(null); row.add(null); model.addRow(row); } if (column == 3) { currentRow++; column = 0; table.setRowSelectionInterval(currentRow, currentRow); table.setColumnSelectionInterval(column, column); table.editCellAt(currentRow, column); } } } } |
似乎拼写错误,只需更改
因为
的任何地方