how to let JTable listens to user's selection and updates a cell value

旧巷老猫 提交于 2020-01-06 01:30:13

问题


I am new to JAVA and I am trying to make a JTable. What I want is that whenever a user make a selection from the comboBox in the Jtable, the Jtable will put the current date in the cell next to the comboBox. I wrote a code, but the code cannot upate the cell value. Here is my code(I just want the Jtable to insert "a" at row 1 column 4 for right now).

 public class GChamber extends JPanel {
private boolean DEBUG = true;
 ListSelectionModel listSelectionModel;
public GChamber() {

    ...

    JTable table1 = new JTable(new Table1());
    listSelectionModel = table1.getSelectionModel();

    table1.setSelectionModel(listSelectionModel);

    ...

    TableColumn TestName=table1.getColumnModel().getColumn(3);
    final JComboBox comboBox= new JComboBox();

    //Setup comboBox. The data of comboBox is from another Jtable.
    for(int i=0;i<table2rowlength;i++)
    {
     comboBox.addItem(Listofdiease[i]);
    }

    comboBox.addActionListener(new ActionListener() 
    TestName.setCellEditor(new DefaultCellEditor(comboBox));
    {

        @Override
        public void actionPerformed(ActionEvent e) {

             String userinput = (String)comboBox.getSelectedItem();
             Table1 temp=new Table1();
              for(int i=0;i<table2rowlength;i++)
                {
                  if (userinput.equals(Listofdiease[i])) {
                      temp.setValueAt("a", 1, 4);

                    }
                }

        }
    });


   ....


}
public class Table1 extends AbstractTableModel  {


        String[] cName1 = {"1","2","3","4","5", "6"};
         Object[][] data1 = {
                {"CC040-2", new Integer(1),"", "","",""}, 
                {"CC040-2", new Integer(2),"Rowing", "", "",""},
                {"CC040-2", new Integer(3),"Knitting", "", "",""},
                {"CC040-2", new Integer(4),"Speed reading", "", "",""},
                {"CC040-2", new Integer(5),"Pool", "", "",""},
                {"CC040-2", new Integer(6),"Pool", "", "",""},
                {"CC040-2", new Integer(7),"Pool", "", "",""},
                {"CC040-2", new Integer(8),"Pool", "", "",""},
                {"CC040-2", new Integer(9),"Pool", "", "",""},
                {"CC040-2", new Integer(10),"Pool", "", "",""},
                {"CC040-2", new Integer(11),"Pool", "", "",""},
                {"CC040-2", new Integer(12),"Pool", "", "",""},
                {"CEA003", new Integer(13),"Pool","", "",""},
                {"CEA003", new Integer(14),"Pool", "", "",""},
                {"CEA003", new Integer(15),"Pool", "", "",""},
                {"CEA003", new Integer(16),"Pool", "", "",""},
                {"CEA004", new Integer(17),"Pool", "", "",""},
                {"CEA004", new Integer(18),"Pool", "", "",""},
                {"CEA004", new Integer(19),"Pool", "", "",""},
                {"CEA004", new Integer(20),"Pool", "", "",""},
        };




        public int getColumnCount() {
            return cName1.length;
        }

        public int getRowCount() {
            return data1.length;
        }

        public String getColumnName(int col) {
            return cName1[col];
        }

        public Object getValueAt(int row, int col) {
            return data1[row][col];
        }


        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }


        public boolean isCellEditable(int row, int col) {

            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }


        public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }

            data1[row][col] = value;
            fireTableCellUpdated(row, col);

            if (DEBUG) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }

        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data1[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }


        public void addTableModelListener(TableModelListener l) {


        }

}

Is there anyone can tell me why this code does not work and how to fix it?


回答1:


You may be able to use one of the approaches suggested here. If the dependent column is not editable, simply return the desired result from your TableModel based on the combo selection. If the dependent column is editable, use either approach shown here.



来源:https://stackoverflow.com/questions/17956074/how-to-let-jtable-listens-to-users-selection-and-updates-a-cell-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!