关于Java:从JTable获取DefaultTableModel

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()

enter

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();
            }
        });
    }
}