返回信息流以下是代码:state列添加JComboBox组件,执行后组件效果可以显示。点击add按钮添加列后,state列就无法显示组件,为什么呢。求指导啊~~
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
public class exer2 extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
private JButton addButton;
private JPanel tablePanel;
private JTable table;
private JScrollPane scrollPane;
private DefaultTableModel tableModel;
private JComboBox stateCombo;
public exer2(){}
public exer2(String title)
{
super(title);
table = createPluginTable();
addButton = new JButton("add");
addButton.setBounds(30,80, 80, 20);
addButton.addActionListener(this);
add(tablePanel,BorderLayout.CENTER);
add(addButton,BorderLayout.SOUTH);
editorStateColumn();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == addButton) //判断按钮
{
String addColumnName = JOptionPane.showInputDialog("columnName");
tableModel.addColumn(addColumnName);
}
}
public JTable createPluginTable()
{
tablePanel = new JPanel();
String[][] cells= {{"name1","state1"},{"name2","state2"},
{"name3","state3"},{"name4","state4"}};
String[] columnNames = {"name","state"};
tableModel = new DefaultTableModel(cells,columnNames);
table = new JTable(tableModel);
scrollPane = new JScrollPane(table);
scrollPane.setPreferredSize(new Dimension(280,350));
tablePanel.add(scrollPane,BorderLayout.CENTER);
return table;
}
public void editorStateColumn()
{
String[] stateBuffer = {"install","uninstall","resolve","active"};
stateCombo = new JComboBox(stateBuffer);
TableColumnModel columnModel = table.getColumnModel();
TableColumn stateColumn = columnModel.getColumn(getColumnIndex("state"));
stateColumn.setCellEditor(new DefaultCellEditor(stateCombo));
}
public int getColumnIndex(String name)
{
for(int i=0;i<table.getColumnCount();i++)
{
if(table.getColumnName(i).equals(name))
return i;
}
return -1;
}
public static void main(String[] args)
{
exer2 frame = new exer2("plugin");
frame.setBounds(100, 200, 450, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #18295同步于 2011/5/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求助:table添加列后,之前添加的组件失效
shoren
2011/5/11镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
当你加一列后,你设置的cellEditor就没了。
在按钮事件里重新设置cellEditor
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == addButton) //判断按钮
{
String addColumnName = JOptionPane.showInputDialog("columnName");
tableModel.addColumn(addColumnName);
editorStateColumn();
}
}