Я использую JTextField
внутри JTable
клеток;Я использую TabelModel
, который имеет динамические данные JTable
.Теперь, когда я нажимаю кнопку, я читаю значение ячейки.Проблема в том, что ячейка с текущим фокусом не возвращает обновленное значение.Например, рассмотрим эту программу:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class MyTable extends JFrame {
DefaultTableModel tmodel = new DefaultTableModel(new Object[][]{
{"some"}, {"any"}, {"even"}, {"text"}, {"and"}, {""}},
new Object[]{"Column 1"});
public MyTable() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTable table = new JTable(tmodel);
table.setDefaultRenderer(Object.class, new MyRenderer());
getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
getContentPane().setLayout(new GridLayout(2, 2));
JButton jb = new JButton("click me"); //button to display last cell data
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(
null, table.getModel().getValueAt(5, 0));
}
});
getContentPane().add(jb);
}
public static void main(String arg[]) {
new MyTable().setVisible(true);
}
}
class MyRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JTextField editor = new JTextField();
if (value != null) {
editor.setText(value.toString());
}
return editor;
}
}
Здесь я оставляю последнее поле пустым.Когда я читаю это по
table.getModel().getValueAt(5, 0)
, я получаю null
.Теперь я изменяю значение на 5,0 и снова нажимаю кнопку, но теперь снова получаю null
.Теперь, что удивительно, я редактирую другую ячейку, снова нажимаю кнопку;теперь я получаю правильные данные в ячейке 5,0!Почему это?Это ошибка?Я испробовал несколько возможностей!