请问如何用JTable 实现鼠标单击表格并获取表格的值输出在界面文本框里?

解决方案 »

  1.   

    重点参考代码中这一行的事件处理:
      table.getModel().addTableModelListener(new TableModelListener()import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Window;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.JToolTip;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;/**
     * 主窗口 
     */
    public class TestJTable extends JFrame {    private JTable table = new JTable(20, 6) {
            // 自定义ToolTips
            public JToolTip createToolTip() {
                JToolTip tip = super.createToolTip();
                tip.setLayout(new BorderLayout());
                tip.add(new JButton("Hello"), BorderLayout.NORTH);
                tip.add(new JButton("Hello"), BorderLayout.SOUTH);
                tip.setPreferredSize(new Dimension(300, 200));
                return tip;
            }
        };    public TestJTable() {
            this.setSize(800, 600);        // 预置ToolTip
            table.setToolTipText("");        // 借助事件监听,实现单元格自动计算 6=4+5
            table.getModel().addTableModelListener(new TableModelListener() {
                public void tableChanged(TableModelEvent e) {
                    int col = e.getColumn();
                    int row = e.getFirstRow();
                    if (col == 3 || col == 4) { // 因为列数从0开始算,所以要减一
                        double v4 = 0;
                        try {
                            v4 = Double.valueOf(String.valueOf(table.getValueAt(row, 3)));
                        } catch (NumberFormatException ex) {
                        }
                        double v5 = 0;
                        try {
                            v5 = Double.valueOf(String.valueOf(table.getValueAt(row, 4)));
                        } catch (NumberFormatException ex) {
                        }
                        table.setValueAt(v4 + v5, row, 5);
                    }
                }
            });
            this.add(table, BorderLayout.CENTER);        // 弹出新窗口,显示所选中行的数据
            JButton btnNewFrame = new JButton("Popup new JFrame");
            btnNewFrame.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    // 先获得所选中行的数据
                    Object[] data = getSelectedRowData();
                    // 构造弹出窗口,并将数据传递进去
                    PopupFrame frm = new PopupFrame(data);
                    // 显示该窗口
                    frm.setVisible(true);
                }
            });
            this.add(btnNewFrame, BorderLayout.SOUTH);
        }    public Object[] getSelectedRowData() {
            int colummCount = table.getModel().getColumnCount();// 列数
            Object[] objs = new Object[colummCount];
            for (int i = 0; i < colummCount; i++) {
                objs[i] = table.getModel().getValueAt(table.getSelectedRow(), i);
            }
            return objs;
        }    public static void main(String[] args) {
            TestJTable wnd = new TestJTable();
            wnd.setDefaultCloseOperation(EXIT_ON_CLOSE);
            wnd.setVisible(true);
        }}/**
     * 弹出窗口
     */
    class PopupFrame extends JFrame {
        public PopupFrame(Object[] data) {
            this.setSize(400, 300);
            this.setLayout(new FlowLayout());
            // 借助JLabel,循环把数据都显示出来
            for (int i = 0; i < data.length; i++) {
                JLabel lbl = new JLabel(String.valueOf(data[i])); 
                this.add(lbl);
            }
            JButton btnTest = new JButton("CountWindowsNumber");
            btnTest.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    Window[] wnds = Window.getWindows();
                    for (Window wnd : wnds) {
                        System.out.println(wnd.getName() + "\t" + wnd.getClass());
                    }
                }
            });
            this.add(btnTest);
        }
    }
      

  2.   

            table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
                @Override
                public void valueChanged(ListSelectionEvent event) {
                    if (!event.getValueIsAdjusting()) {
                        TableModel model = table.getModel();
                        int row = table.getSelectedRow();
                        int column = table.getSelectedColumn();
                        System.out.println(model.getValueAt(row, column));
                    }
                }
            });
      

  3.   

    你是要让别给你做作业吧!
    都把最难的部分给你弄出来了,剩下的那一点都不会做?
    写个界面,然后在上面输出的部分用textArea.setText(..)都懒得动手吗!