2013-09-01 6 views
0

3 차원 행렬의 데이터를 여러 JTable에 맞추려고합니다. 나는 내가 목표로하는 레이아웃을 제공하는 방식으로 연결된 여러 패널로 구성된 레이아웃을 사용하고있다. (나는 GridBagLayout에 너무 익숙하지 않아서, 내 자신의 레이아웃을 함께 사용하고있다.) 문제는 이제 테이블이 프레임에 표시되지 않고, 문제가 여러 패널인지, 아니면 3 차원 행렬을 사용하고 있기 때문에 문제인지를 알 수 없습니다. JTable을 사용하면 테이블, 레이어 등의 필드를 사용하지 않을 때 작동합니다. sth로 가정합니다. 거기서 잘못해야합니다. 귀하의 도움과 tipps에 대해 매우 감사드립니다! 고마워요!JTable, 3 차원 행렬 및 다중 패널

import java.awt.*; 
import javax.swing.*; 
import javax.swing.JTable; 

public class Tabellen extends JFrame{ 

private static final long serialVersionUID = 7526472295622776147L; 
Container c; 
JPanel p_tabellen; 
JPanel[] p_tab; 
JTable[] table; 
String[] columnnames={}; 
String[][][] matrixStr; 
double[][][] matrix; 

public Tabellen(double [][][] matrix) { 
    //create a matrix of Strings from a double-matrix that can be read by the JTable constructor 
    this.matrix=matrix; 
    matrixStr = new String[matrix.length][matrix[0].length][matrix[0][0].length]; 
    for (int dim=0; dim<matrix.length; dim++){ 
     for (int zeile=0; zeile<matrix[0].length; zeile++){ 
      for (int spalte=0; spalte<matrix[0][0].length; spalte++){ 
       matrixStr[dim][zeile][spalte]= String.valueOf(matrix[dim][zeile][spalte]); 
      } 
     } 
    } 

    //create panels and Layouts 
    c = getContentPane(); 
    p_tabellen= new JPanel(new GridLayout(matrix.length,1)); 
    p_tab= new JPanel[matrix.length]; 
    for (int p=0; p<matrix.length; p++){ 
     p_tab[p]= new JPanel(new BorderLayout()); 
     p_tabellen.add(p_tab[p]); 
    } 
    c.add(p_tabellen); 

    //create one table per panel 
    table = new JTable[matrix.length]; 
    for (int dim=0; dim<matrix.length; dim++){ 
     for (int zeile=0; zeile<matrix[0].length; zeile++){ 
      for (int spalte=0; spalte<matrix[0][0].length; spalte++){ 
       table[dim]= new JTable(matrixStr[dim],columnnames); 
       p_tab[dim].add(table[dim], BorderLayout.CENTER); 
      } 
     } 
    } 

} 
} 

입력 예 : 여기

내 코드의

public class TEST { 

public static void main(String[] args) { 

    double [][][] matrix = {{{2,4,6},{7,8,9}},{{1,2,3},{3,4,8}},{{1,2,4},{5,7,9}},{{2,4,6},{7,8,9}},{{1,2,3},{3,4,8}},{{1,2,4},{5,7,9}},{{2,4,6},{7,8,9}},{{1,2,3},{3,4,8}},{{1,2,4},{5,7,9}},{{2,4,6},{7,8,9}},{{1,2,3},{3,4,8}},{{1,2,4},{5,7,9}},{{2,4,6},{7,8,9}},{{1,2,3},{3,4,8}},{{1,2,4},{5,7,9}}}; 

    Tabellen d= new Tabellen(matrix); 

    d.setTitle("test"); 
    d.setSize(1300,720); 
    d.setVisible(true); 
    d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

} 
+1

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

답변

1

spaltezeile 행을 표시하기위한 것입니다 dim 각 테이블을 가정하는 List<TableModel> 가진 dim 항목 각각에 대해 하나를 만들 표. 단일 JTable을 만들고 setModel()을 사용하여 모델을 업데이트하십시오. 사용자가 인접 컨트롤을 사용하여 현재 표시된 모델을 선택하게하십시오. 이 exampleJComboBox을 사용하지만 JSpinner은 좋은 대안입니다. TableModel을 만드는 방법에 대한 자세한 내용은 here을 참조하십시오.

+0

답변 해 주셔서 감사합니다. 귀하의 제안은 확실히 더 우아한 접근 방법입니다. 그러나 사용자가 더 쉽게 비교할 수 있도록 모든 차트를 동시에 표시하는 것을 목표로합니다. 이제 다음 행을 추가하면 작동합니다. table [dim] .setAutoResizeMode (JTable.AUTO_RESIZE_OFF); & sp [dim] = 새 JScrollPane (table [dim]); & 테이블 [dim] .setPreferredScrollableViewportSize (table [dim] .getPreferredSize()) ;. 나는 다음 번에 당신의 제안을 염두에 두겠다. – user2737095

+0

또한'JPanel'의'GridLayout'을 고려하십시오; [getPreferredScrollableViewportSize()]를 오버라이드 ([here] (http://stackoverflow.com/a/18599978/230513)). – trashgod