在JLabel中的表上显示项目名称

时间:2013-07-21 06:21:13

标签: java swing

我想将我在JTable中选择的项目的名称放在JLabel中,每当我点击表格中的新项目时,JLabel中的文本也会发生变化 谁能告诉我,我应该在java中学到什么来制作它?

2 个答案:

答案 0 :(得分:2)

您应该了解非常基本的Swing编程,并对TableModelSelectionModelListSelectionListener(这是您的目标的关键)有更深入的了解。

一个工作示例:

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);
    }
}

编辑:

我修改了代码以收听模型 AND 列模型中的两个选择事件,以获得更准确的结果。

答案 1 :(得分:1)

首先创建JLabel

JLabel label = new JLabel();

然后在表格中添加一个监听器以供选择:

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent event) {
        label.setText(table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
    }
});