在java中设置jtable中下一列的数据

大家好,伙计们。 我想问一下,如何设置下一列值的值? 在这里,我有计数器“counter”,它在sampleTable中添加了真正的布尔值。 我想要做的是在表的下一列中为“total”设置数据的值。 “总”数据应该是计数器值。 我该怎么办?

private void tableTest(){ int nRow = sampleTable.getRowCount(); int nCol = sampleTable.getColumnCount(); int counter = 0; Object[][] tableData = new Object[nRow][nCol]; for (int i = 0 ; i < nRow ; i++){ for (int j = 3 ; j < nCol ; j++){ tableData[i][j] = sampleTable.getValueAt(i,j); System.out.println(tableData[i][j]); if(tableData[i][j] != null && tableData[i][j].equals(true)){ counter++; } } /* if(nCol == 7){ sampleTable.setValueAt(i, 7, counter); }else{ tableData = new Object[nRow][nCol + 1]; sampleTable.setValueAt(i, 7, counter); }*/ System.out.println(counter); sampleTable.setValueAt(i,7,counter); counter = 0; } } 

没有更多的继续,不可能知道1.你想做什么和2.你可能做错了什么…

以下示例非常简单。 它的作用是允许你对表进行更改,然后点击“更新”按钮,然后通过该按钮计算每行的总数……

 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.AbstractTableModel; public class TallyTableTest { public static void main(String[] args) { new TallyTableTest(); } public TallyTableTest() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } try { final MyTableModel model = new MyTableModel(); loadData(model); JTable table = new JTable(model); JButton update = new JButton("Update"); update.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (int row = 0; row < model.getRowCount(); row++) { int counter = 0; for (int col = 3; col < 7; col++) { Object value = model.getValueAt(row, col); if (value instanceof Boolean && (boolean)value) { counter++; } } model.setValueAt(counter, row, 7); } } }); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new JScrollPane(table)); frame.add(update, BorderLayout.SOUTH); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (IOException exp) { exp.printStackTrace(); } } }); } public void loadData(MyTableModel model) throws IOException { // Fill your model here } public static class MyTableModel extends AbstractTableModel { protected static final String[] COLUMNS = new String[]{ "ID", "First Name", "Last Name", "1", "2", "3", "4", "total" }; protected static final Class[] COLUMN_TYPES = new Class[]{ Integer.class, String.class, String.class, Boolean.class, Boolean.class, Boolean.class, Boolean.class, Integer.class }; private List rows; public MyTableModel() { rows = new ArrayList<>(25); } public void addRow(Object[] data) { rows.add(data); } @Override public int getRowCount() { return rows.size(); } @Override public int getColumnCount() { return COLUMNS.length; } @Override public Class getColumnClass(int columnIndex) { return COLUMN_TYPES[columnIndex]; } @Override public String getColumnName(int column) { return COLUMNS[column]; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Object[] row = rows.get(rowIndex); return row[columnIndex]; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { Object[] row = rows.get(rowIndex); row[columnIndex] = aValue; fireTableCellUpdated(rowIndex, columnIndex); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return columnIndex >= 3 && columnIndex <= 6; } } } 

它的例子是实时更新总数。 这意味着,每次更改行的列值时,它都会重新计算总行数并在内部更新模型。

 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.AbstractTableModel; public class TallyTableTest { public static void main(String[] args) { new TallyTableTest(); } public TallyTableTest() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } try { final MyTableModel model = new MyTableModel(); loadData(model); JTable table = new JTable(model); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (IOException exp) { exp.printStackTrace(); } } }); } public void loadData(MyTableModel model) throws IOException { // Fill your model here... } public static class MyTableModel extends AbstractTableModel { protected static final String[] COLUMNS = new String[]{ "ID", "First Name", "Last Name", "1", "2", "3", "4", "total" }; protected static final Class[] COLUMN_TYPES = new Class[]{ Integer.class, String.class, String.class, Boolean.class, Boolean.class, Boolean.class, Boolean.class, Integer.class }; private List rows; public MyTableModel() { rows = new ArrayList<>(25); } public void addRow(Object[] data) { rows.add(data); } @Override public int getRowCount() { return rows.size(); } @Override public int getColumnCount() { return COLUMNS.length; } @Override public Class getColumnClass(int columnIndex) { return COLUMN_TYPES[columnIndex]; } @Override public String getColumnName(int column) { return COLUMNS[column]; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Object[] row = rows.get(rowIndex); return row[columnIndex]; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { Object[] row = rows.get(rowIndex); row[columnIndex] = aValue; int counter = 0; for (int col = 3; col < 7; col++) { Object value = row[col]; if (value instanceof Boolean && (boolean) value) { counter++; } } row[7] = counter; fireTableCellUpdated(rowIndex, columnIndex); fireTableCellUpdated(rowIndex, 7); } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return columnIndex >= 3 && columnIndex <= 6; } } }