2013-07-15 1 views
0

JTable에서 DefaultTableModel을 가져온 다음 그 위에 Column을 추가하고 싶습니다. JTable에서 검색하지만 getModel() 메소드 만 찾으십시오. 그런 다음 Column을 추가 할 수 없습니다. 결국 JTable의 set Date에 Binding 메서드를 사용하고 DefaultTableModel을 가지지 않고 Column content JButton을 My JTable에 추가하려고한다고 가정 해 보겠습니다. 다시JTable에서 DefaultTableModel 가져 오기

+0

은 확실 DefaultTableModel를가 myTable.getModel() – mKorbel

+0

에서 initalized에 당신은 내가 올바른 열을 추가 모르겠어요 새로운 열을 추가 할 수 없습니다 있습니다. 그러나이 명령을 사용하면 이전 열'jtable.getColumnModel(). addColumn (new TableColumn (3));'에 대한 참조와 함께 열을 추가합니다.이 명령은 열 3을 다시 표시합니다. – Jeus

답변

3
  • , 당신은 (DefaultTableModel model = (DefaultTableModel) table.getModel();)JTable 수 반환 TableModel 캐스팅없이 새 TableColumn 지금은 볼 수 myTable.getModel()

  • 편집에서 initalized DefaultTableModel에 따라 JTable에 추가 할 수 있는지 확인하고,이 하지 addColumn()

enter image description here

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

@ mKorber 내 대답은이 줄'DefaultTableModel 모델 = (DefaultTableModel) table.getModel();' – Jeus

+0

이 오류가 발생합니다 ** 예외 "AWT-EventQueue-0"예외 java.lang.ClassCastException : org.jdesktop.swingbinding .JTableBinding $ BindingTableModel을 javax.swing.table.DefaultTableModel로 변환 할 수 없습니다. ** – Jeus

+0

@Jeus는 질문에서 중요한 정보를 생략 한 것처럼 보입니다 ;-) bindingTableModel의 api 문서를 읽고 if/how가 열 (afair, 모델을 열 속성에 매핑 된 빈 목록에 바인딩 할 때 columnBinding을 추가해야합니다. – kleopatra