0

我想将我在 JTable 中选择的项目的名称放在 JLabel 中,每次单击表中的新项目时,JLabel 中的文本也会更改,有人可以告诉我应该在 java 中学习什么来生成?

4

2 回答 2

2

TableModel您应该了解非常基本的 Swing 编程,并且对, SelectionModeland有更深入的了解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 回答