我想将我在 JTable 中选择的项目的名称放在 JLabel 中,每次单击表中的新项目时,JLabel 中的文本也会更改,有人可以告诉我应该在 java 中学习什么来生成?
问问题
340 次
2 回答
2
TableModel
您应该了解非常基本的 Swing 编程,并且对, SelectionModel
and有更深入的了解ListSelectionListener
(这是实现目标的关键)。
一个工作示例:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class TableSelectionToLabel {
private static JTable t = new JTable(new String[][]{{"1,1", "1,2"}, {"2,1", "2,2"}},
new String[]{"1", "2"});
private static JLabel l = new JLabel("Your selction will appear here");
private static JFrame f = new JFrame("Table selection listener Ex.");
private static ListSelectionListener myListener = new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int col = t.getColumnModel().getSelectionModel().getLeadSelectionIndex();
int row = t.getSelectionModel().getLeadSelectionIndex();
try {
l.setText(t.getModel().getValueAt(row, col).toString());
} catch (IndexOutOfBoundsException ignore) {
}
}
};
public static void main(String[] args) {
t.getSelectionModel().addListSelectionListener(myListener);
t.getColumnModel().getSelectionModel().addListSelectionListener(myListener);
f.getContentPane().add(t, BorderLayout.NORTH);
f.getContentPane().add(l, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
}
编辑:
我修改了代码以监听来自模型和列模型的选择事件,以获得更准确的结果。
于 2013-07-21T06:46:22.693 回答
1
首先创建JLabel
:
JLabel label = new JLabel();
然后在表中添加一个侦听器以进行选择:
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
label.setText(table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
}
});
于 2013-07-21T06:34:22.150 回答