Я положил JComboBox в JTable, но теперь я не могу получить значение, которое я выбрал из JComboBox. Метод table.getModel().getValueAt(row,column)
не работает, и я пытаюсь использовать другой метод, как показано ниже, к сожалению, он не работает.Как получить значение из JComboBox, который вложен в JTable
ответ
Насколько я знаю, как 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);
}
}
Надеется, что это помогает.
'both table.getModel(). GetValueAt (строка, столбец) и table.getValueAt (строка, столбец) показывают работу' - только если таблица не отсортирована или не отфильтрована, t был изменен пользователем. В таблице есть куча методов 'convert ???()', которые необходимо использовать для получения правильных индексов для вышеуказанных ситуаций в зависимости от вашего точного требования. – camickr
Что относительно 'table.getValueAt()'? – XtremeBaumer
Чтобы получить точный ответ, вы должны предоставить [MCVE]. – STaefi
@STaefi большое вам спасибо, ваша демонстрация помогите мне, Теперь я нахожу свою ошибку, спасибо, спасибо! –