JTable Boolean.class

import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; class ColorTableModel extends AbstractTableModel { Object rowData[][] = { { "value1", Boolean.FALSE }, { "value1", Boolean.FALSE }, { "value1", Boolean.FALSE }, { "value1", Boolean.FALSE}, { "value1", Boolean.FALSE }, }; String columnNames[] = { "English", "Boolean" }; public int getColumnCount() { return columnNames.length; } public String getColumnName(int column) { return columnNames[column]; } public int getRowCount() { return rowData.length; } public Object getValueAt(int row, int column) { return rowData[row][column]; } public Class getColumnClass(int column) { return (getValueAt(0, column).getClass()); } public void setValueAt(Object value, int row, int column) { rowData[row][column] = value; } public boolean isCellEditable(int row, int column) { return (column != 0); } } public class EditableColorColumn { public static void main(String args[]) { JFrame frame = new JFrame("Editable Color Table"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); TableModel model = new ColorTableModel(); JTable table = new JTable(model); // TableColumn column = table.getColumnModel().getColumn(3); // column.setCellRenderer(renderer); // column.setCellEditor(editor); JScrollPane scrollPane = new JScrollPane(table); frame.add(scrollPane, BorderLayout.CENTER); frame.setSize(400, 150); frame.setVisible(true); } 

如果我勾选相应的行,我想得到第一列的值。 我已经阅读了很多关于此的内容,但我不能把它放到代码中。 你能编一个代码吗?

示例场景,当我勾选row1复选框时,它将是system.out.println() ,其结果为value1

您在AbstractTableModel实现setValueAt()无法触发将通知侦听器更改的事件:

 @Override public void setValueAt(Object value, int row, int column) { rowData[row][column] = value; fireTableCellUpdated(row, column); } 

一旦纠正, TableModelListener将看到每个更改。 尝试注释掉fireTableCellUpdated()行以查看差异。

此外:

  • 应该在事件派发线程上构造和操作Swing GUI对象。

  • 避免在Java Swing中使用set(Preferred|Maximum|Minimum)Size方法; setPreferredScrollableViewportSize()只是稍微危险一点。

码:

 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; /** * @see https://stackoverflow.com/q/13497276/230513 */ public class EditableColorColumn { public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new EditableColorColumn().display(); } }); } private void display() { JFrame frame = new JFrame("Editable Color Table"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final TableModel model = new ColorTableModel(); JTable table = new JTable(model); table.setPreferredScrollableViewportSize(new Dimension(400, 150)); table.getModel().addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent e) { System.out.println(model.getValueAt(e.getFirstRow(), 0) + " " + model.getValueAt(e.getFirstRow(), 1)); } }); frame.add(new JScrollPane(table), BorderLayout.CENTER); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } private static class ColorTableModel extends AbstractTableModel { String columnNames[] = {"English", "Boolean"}; Object rowData[][] = { {"value1", Boolean.FALSE}, {"value2", Boolean.TRUE}, {"value3", Boolean.FALSE}, {"value4", Boolean.TRUE}, {"value5", Boolean.FALSE},}; @Override public int getColumnCount() { return columnNames.length; } @Override public String getColumnName(int column) { return columnNames[column]; } @Override public int getRowCount() { return rowData.length; } @Override public Object getValueAt(int row, int column) { return rowData[row][column]; } @Override public Class getColumnClass(int column) { return (getValueAt(0, column).getClass()); } @Override public void setValueAt(Object value, int row, int column) { rowData[row][column] = value; fireTableCellUpdated(row, column); } @Override public boolean isCellEditable(int row, int column) { return (column != 0); } } } 

您可以使用getSelectedRow()来获取所选的行。 然后使用getValueAt(row,column),其中row是从getSelectedRow()获得的值,column是您想要的列。 试试以下: –

int row=table.getSelectedRow();

String value=table.getValueAt(row, 0).toString();

其中0表示它将返回第一列的值。

如果只需要获取所选列的值,请尝试此操作

 table.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int row = table.getSelectedRow(); System.out.println("Selected Row ; " + row ); System.out.println("Velue : " + model.getValueAt(row, 0)); } });