2013-09-01 6 views
0

Я пытаюсь подстроить данные из трехмерной матрицы на несколько JTables. Я использую макет, который состоит из нескольких панелей, которые связаны способом, который дает мне макет, на который я нацелен (я не слишком хорошо знаком с GridBagLayout, поэтому я компоную свой собственный макет). Проблема в том, что таблицы не отображаются в кадре, и я не знаю, является ли проблема несколькими панелями или это связано с тем, что я использую трехмерную матрицу. Использование JTable работает, когда не используется поля таблиц, слоев и т. Д. - Предполагаю, что sth. должно пойти не так. Я очень благодарен вам за помощь и подсказки! Большое спасибо!JTable, трехмерная матрица и несколько панелей

Вот мой код:

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

Предполагая, что каждый из dim таблиц предназначены для отображения zeile строк в spalte столбцов, создать List<TableModel>, имеющие dim записи, по одному для каждого Таблица. Создайте один JTable и обновите его модель, используя setModel(). Позвольте пользователю выбрать текущую отображаемую модель с помощью смежного элемента управления. В этом example используется JComboBox, но JSpinner - хорошая альтернатива. Подробнее о создании TableModel можно найти по адресу here.

+0

Спасибо за ваш ответ! Ваше предложение, безусловно, более элегантный подход. Тем не менее, я нацелен на одновременное отображение всех диаграмм, чтобы пользователь мог легче сравнивать их. Теперь он работает, когда я добавляю следующие строки: table [dim] .setAutoResizeMode (JTable.AUTO_RESIZE_OFF); & sp [dim] = новый JScrollPane (таблица [dim]); & table [dim] .setPreferredScrollableViewportSize (таблица [dim] .getPreferredSize()) ;. Однако буду иметь в виду ваши предложения в следующий раз. – user2737095

+0

Также рассмотрим 'GridLayout'' JPanel'; переопределить 'getPreferredScrollableViewportSize()', как показано [здесь] (http://stackoverflow.com/a/18599978/230513). – trashgod

Смежные вопросы