2014-11-17 1 views
2

내 질문에 동적, JTable에서 행과 열의 수를 설정하는 방법입니까? 사용자가 2 행 2 열의 표를 만들고 싶다면 번호를 입력하면됩니다. 어떻게 할 수 있습니까, 나는 성공없이 DefaultModel로 시도했습니다.JTable 동적 행 및 열을 설정하는 방법

어떤 도움을 주셔서 감사합니다.

감사

+0

당신은 '들쭉날쭉'테이블을 의미합니까? 사용자가 3 열이있는 행 하나와 4 열이있는 다른 행을 허용 할 수 있습니까? 아니면 테이블에 행을 추가하는 데 문제가 있습니까? – Radiodef

+0

시도한 코드를 게시하십시오. – alterfox

+0

'TableModel'은 솔루션입니다 ... – MadProgrammer

답변

4

DefaultTableModel는 런타임에 행/열 수를 정의 할 수있는 두 가지 방법이있다. 당신은 할 수

...

단순히 그것을 행과 열 당신이 원하는 전달, 새로운 DefaultTableModel 만들 ...
DefaultTableModel model = new DefaultTableModel(rows, cols); 

다음은 JTable이 적용됩니다. 이것은 명백하게 기존 테이블 모델을 대체합니다. 즉, 모든 데이터를 잃게됩니다.

당신은 할 수 ...

마스터 DefaultTableModel를 만들고 JTable에 적용 단순히 필요에 따라

model.setRowCount(rows); 
model.setColumnCount(cols); 

동적으로 행과 열의 수를 업데이트하는 데 사용할. 이것은 당신이 테이블 모델 내의 데이터를 보존 할 수 있습니다 ...

의 Runnable 예 자세한 내용은

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JSpinner; 
import javax.swing.JTable; 
import javax.swing.SpinnerNumberModel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.table.DefaultTableModel; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JTable table; 
     private DefaultTableModel model; 
     private JSpinner fldRows; 
     private JSpinner fldColumns; 

     public TestPane() { 

      setLayout(new BorderLayout()); 

      fldRows = new JSpinner(new SpinnerNumberModel(1, 1, 999999, 1)); 
      fldColumns = new JSpinner(new SpinnerNumberModel(1, 1, 999999, 1)); 

      JPanel options = new JPanel(new GridBagLayout()); 
      options.add(new JLabel("Rows: ")); 
      options.add(fldRows); 
      options.add(new JLabel("Columns: ")); 
      options.add(fldColumns); 

      JButton update = new JButton("Update"); 
      options.add(update); 

      update.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        int rows = (int) fldRows.getValue(); 
        int cols = (int) fldColumns.getValue(); 

        // Dynamic master model... 
//     model.setRowCount(rows); 
//     model.setColumnCount(cols); 

        // Replace model 
        table.setModel(new DefaultTableModel(rows, cols)); 
       } 
      }); 

      model = new DefaultTableModel(); 
      table = new JTable(); 
      add(new JScrollPane(table)); 
      add(options, BorderLayout.NORTH); 

     } 

    } 

} 

참조 (당신은, 다음이 잃어버린 행 또는 열을 제거 할 때 예상)