我想你可以为每一列新建一个TableCellEditor继承于不同的Compoent (当你的输入焦点fous时便激发),然后在这个类里面写激发事件,最后设定不同的列为不同的TableCellEditor:table.getColumnModal().getColumn(i).setCellEdito(TableCellEditor) 
就可以了.
再说以下:JTable在显示是调用TableCellRenderer ,可以利用这个类实现每一列的不同显示风格,比如Label,Checkbox,Listbox等等,任意的Component都可以.

解决方案 »

  1.   


    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class TestClick extends JFrame
    {
        JTable table;
        class MyModel extends javax.swing.table.AbstractTableModel
        {
            int rowCount = 10;
            int columnCount = 10;
            String names[] = new String[columnCount];
            Object[][] dataTable = new Object[rowCount][columnCount];
            {
                for(int i=0;i<dataTable.length;i++)
                {
                    names[i]="第 "+(i+1)+" 列";
                    for (int j = 0; j < dataTable[i].length; j++)
                    {
                        dataTable[i][j] = new Integer(i * j);
                        if (j==0)
                            dataTable[i][j]="第 "+i+" 行";
                    }
                }
            }
            public int getRowCount()
            {
                return rowCount;
            }
            public int getColumnCount()
            {
                return columnCount;
            }
            public String getColumnName(int column)
            {
                return names[column];
            }
            public Object getValueAt(int row,int column)
            {
                return dataTable[row][column];
            }
        }
        private java.awt.Container container;
        public TestClick()
        {
            init();
        }
        private void init()
        {
            container = this.getContentPane();
        }
        public void setCenter()
        {
            Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize = this.getSize();
            this.setBounds((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2,
                           frameSize.width,frameSize.height);
        }
        public JComponent getTopPanel()
        {
            return new JLabel("点击奇数行和偶数行会弹出不同的对话框",JLabel.CENTER);
        }
        class MyMouseListener implements java.awt.event.MouseListener
        {
            public void mouseClicked(MouseEvent e)
            {
                if (table.getSelectedRow()%2==0)
                {
                    JOptionPane.showInputDialog("你的点的是偶数行");
                }
                else
                {
                    JOptionPane.showMessageDialog(null,"你的点的是奇数行");
                }
            }
            public void mousePressed(MouseEvent e){}
            public void mouseReleased(MouseEvent e){}
            public void mouseEntered(MouseEvent e){}
            public void mouseExited(MouseEvent e){}
        }
        public JComponent getMainPanel()
        {
            table = new JTable(new MyModel());
            table.addMouseListener(new MyMouseListener());
            return new JScrollPane(table);
        }
        public void loadComponent()
        {
            container.setLayout(new BorderLayout());
            container.add(getTopPanel(),BorderLayout.NORTH);
            container.add(getMainPanel(),BorderLayout.CENTER);
        }
        public static void main(String[] args)
        {
            TestClick f = new TestClick();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.loadComponent();
            f.setSize(600,400);
            f.setCenter();
            f.setVisible(true);
        }
    }