JTable에서 DefaultTableModel을 가져온 다음 그 위에 Column을 추가하고 싶습니다. JTable에서 검색하지만 getModel() 메소드 만 찾으십시오. 그런 다음 Column을 추가 할 수 없습니다. 결국 JTable의 set Date에 Binding 메서드를 사용하고 DefaultTableModel을 가지지 않고 Column content JButton을 My JTable에 추가하려고한다고 가정 해 보겠습니다. 다시JTable에서 DefaultTableModel 가져 오기
답변
, 당신은
(DefaultTableModel model = (DefaultTableModel) table.getModel();)
JTable
수 반환 TableModel 캐스팅없이 새 TableColumn 지금은 볼 수myTable.getModel()
편집에서 initalized DefaultTableModel에 따라 JTable에 추가 할 수 있는지 확인하고,이 하지
addColumn()
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();
}
});
}
}
@ mKorber 내 대답은이 줄'DefaultTableModel 모델 = (DefaultTableModel) table.getModel();' – Jeus
이 오류가 발생합니다 ** 예외 "AWT-EventQueue-0"예외 java.lang.ClassCastException : org.jdesktop.swingbinding .JTableBinding $ BindingTableModel을 javax.swing.table.DefaultTableModel로 변환 할 수 없습니다. ** – Jeus
@Jeus는 질문에서 중요한 정보를 생략 한 것처럼 보입니다 ;-) bindingTableModel의 api 문서를 읽고 if/how가 열 (afair, 모델을 열 속성에 매핑 된 빈 목록에 바인딩 할 때 columnBinding을 추가해야합니다. – kleopatra
은 확실 DefaultTableModel를가 myTable.getModel() – mKorbel
에서 initalized에 당신은 내가 올바른 열을 추가 모르겠어요 새로운 열을 추가 할 수 없습니다 있습니다. 그러나이 명령을 사용하면 이전 열'jtable.getColumnModel(). addColumn (new TableColumn (3));'에 대한 참조와 함께 열을 추가합니다.이 명령은 열 3을 다시 표시합니다. – Jeus