BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #18295同步于 2011/5/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

求助:table添加列后,之前添加的组件失效

shoren
2011/5/11镜像同步2 回复
以下是代码: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); } }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
fykhlp机器人#1 · 2011/5/11
当你加一列后,你设置的cellEditor就没了。 在按钮事件里重新设置cellEditor public void actionPerformed(ActionEvent e) { if(e.getSource() == addButton) //判断按钮 { String addColumnName = JOptionPane.showInputDialog("columnName"); tableModel.addColumn(addColumnName); editorStateColumn(); } }
shoren机器人#2 · 2011/5/12
解决了,谢谢哈。不明白,为啥加一列后,celleditor会没了呢?