Get DefaultTableModel from JTable
我想从JTable获取DefaultTableModel,然后向其中添加Column。
我在JTable中搜索但只找到getModel()方法,然后无法在其中添加Column。
最后,我使用Binding方法在JTable中设置日期,然后没有DefaultTableModel,我想将列内容JButton添加到我的JTable中。
-
再次,
您确定不能基于从
myTable.getModel() 初始化的DefaultTableModel向JTable添加新的TableColumn
-
EDIT现在,我可以看到不强制转换
(DefaultTableModel model = (DefaultTableModel) table.getModel();) JTable 可以返回TableModel,而没有addColumn()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Stack; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.WindowConstants; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; public class TableRowHeight { private static final long serialVersionUID = 1L; private JFrame frame = new JFrame("p*s*s*s*s*t*t"); private String[] columnNames = {"one","two","Playing with","four","five",}; private String[][] data = { {"aaaaaa","bbbbbb","cccccc","dddddd","eeeeeee",}, {"bbbbbb","cccccc","dddddd","eeeeeee","aaaaaa",}, {"cccccc","dddddd","eeeeeee","aaaaaa","bbbbbb",}, {"dddddd","eeeeeee","aaaaaa","bbbbbb","cccccc",}, {"eeeeeee","aaaaaa","bbbbbb","cccccc","dddddd",}}; private JTable table = new JTable(new DefaultTableModel(data, columnNames)); private TableColumnModel tcm = table.getColumnModel(); private Stack<TableColumn> colDeleted = new Stack<TableColumn>(); private JButton restoreButton = new JButton("Restore Column Size"); private JButton hideButton = new JButton("Set Column Size to Zero"); private JButton deleteButton = new JButton("Delete Column"); private JButton addButton = new JButton("Restore Column"); private JButton addNewButton = new JButton("Add New Column"); private int i = 1; public TableRowHeight() { table.setRowMargin(4); table.setRowHeight(30); table.setFont(new Font("SansSerif", Font.BOLD + Font.PLAIN, 20)); JScrollPane scrollPane = new JScrollPane(table); for (int i = 0; i < (tcm.getColumnCount()); i++) { tcm.getColumn(i).setPreferredWidth(150); } table.setPreferredScrollableViewportSize(table.getPreferredSize()); restoreButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { tcm.getColumn(2).setPreferredWidth(100); } }); hideButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { tcm.getColumn(2).setPreferredWidth(000); } }); deleteButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (table.getColumnCount() > 0) { TableColumn colToDelete = table.getColumnModel().getColumn(table.getColumnCount() - 1); table.removeColumn(colToDelete); table.validate(); colDeleted.push(colToDelete); addButton.setEnabled(true); } else { deleteButton.setEnabled(false); } } }); addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (colDeleted.size() > 0) { table.addColumn(colDeleted.pop()); table.validate(); deleteButton.setEnabled(true); } else { addButton.setEnabled(false); } } }); addNewButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DefaultTableModel model = (DefaultTableModel) table.getModel(); model.addColumn("New Column" + i); i++; } }); JPanel btnPanel = new JPanel(); btnPanel.add(hideButton); btnPanel.add(restoreButton); btnPanel.add(deleteButton); btnPanel.add(addButton); btnPanel.add(addNewButton); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.add(scrollPane, BorderLayout.CENTER); frame.add(btnPanel, BorderLayout.SOUTH); frame.pack(); frame.setLocation(150, 150); frame.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { TableRowHeight frame = new TableRowHeight(); } }); } } |