2017-02-14 16 views
0

Я положил JComboBox в JTable, но теперь я не могу получить значение, которое я выбрал из JComboBox. Метод table.getModel().getValueAt(row,column) не работает, и я пытаюсь использовать другой метод, как показано ниже, к сожалению, он не работает.Как получить значение из JComboBox, который вложен в JTable

here

+0

Что относительно 'table.getValueAt()'? – XtremeBaumer

+1

Чтобы получить точный ответ, вы должны предоставить [MCVE]. – STaefi

+0

@STaefi большое вам спасибо, ваша демонстрация помогите мне, Теперь я нахожу свою ошибку, спасибо, спасибо! –

ответ

0

Насколько я знаю, как table.getModel().getValueAt(row,column) и table.getValueAt(row,column) должны работать, если таблица не сортируется или фильтруются на колонках не заказана.

Вы не указали полный код, поэтому мы можем только догадываться, что вызвало проблему. Возможно, вы внесли неполный CellEditor и не установили значения модели после выбора одного из значений JComboBox.

Следующий образец работает, и он может вам помочь. Обратите внимание, как с помощью DefaultCellEditor с JComboBox достаточно для многих случаев и вам не нужно реализовать CellEditor для этого:

public class Main { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     // 
     String[] tempColumnNames = new String[] { "#", "Name", "Family", "Age" }; 
     Vector<String> columnNames = new Vector<String>(
       Arrays.asList(tempColumnNames)); 
     Vector<Vector<String>> data = new Vector<Vector<String>>(); 
     for (int i = 0; i < 10; i++) { 
      Vector<String> rowData = new Vector<String>(Arrays.asList((i + 1) 
        + "", "Name-" + (i + 1), "Family-" + (i + 1), i + 20 + "")); 
      data.add(rowData); 
     } 
     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     final JTable table = new JTable(model); 
     // 
     JComboBox<String> ageCombo = new JComboBox<String>(
       new DefaultComboBoxModel<String>(new String[] { "20", "21", 
         "22", "23", "24", "25", "26", "27", "28", "29", "30" })); 
     table.getColumnModel().getColumn(3) 
       .setCellEditor(new DefaultCellEditor(ageCombo)); 
     // 
     frame.getContentPane().add(new JScrollPane(table)); 
     // 
     JButton showDialogButton = new JButton("Show Selected Age"); 
     showDialogButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane.showMessageDialog(frame, "selected age: " 
         + table.getValueAt(table.getSelectedRow(), 3)); 
      } 
     }); 
     frame.getContentPane().add(showDialogButton, BorderLayout.NORTH); 
     // 
     frame.setBounds(500, 500, 350, 200); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 

Надеется, что это помогает.

+0

'both table.getModel(). GetValueAt (строка, столбец) и table.getValueAt (строка, столбец) показывают работу' - только если таблица не отсортирована или не отфильтрована, t был изменен пользователем. В таблице есть куча методов 'convert ???()', которые необходимо использовать для получения правильных индексов для вышеуказанных ситуаций в зависимости от вашего точного требования. – camickr