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