#java #swing #for-loop #jtable #defaulttablemodel
#java #swing #для цикла #jtable #defaulttablemodel
Вопрос:
я разрабатываю настольное приложение. Когда я выполняю свой файл .jar на других компьютерах, jframe, в который я загружаю данные в datatable, работает некорректно. Jre одинакова на обоих компьютерах. Jar отлично работает на моем компьютере.
Вот код:
public int cargarClaseEnVentanaResultados(ConjuntoResultados conjunto, ControladorVentanaResultados cont){
ArrayList<JPanel> jpArray= new ArrayList<>();
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
String tipoExperimento = new String();
int contadorVariables = 0;
if (!conjunto.getConjuntoResultados().isEmpty()){
for (int i=0;i<conjunto.getConjuntoResultados().size();i ){
JTable jtable = new JTable(){
public boolean isCellEditable(int rowIndex, int colIndex) {
return false; //Disallow the editing of any cell
}
};
jtable.setRowSelectionAllowed(true);
jtable.setColumnSelectionAllowed(true);
jtable.setCellSelectionEnabled(true);
JPanel jpanel = new JPanel();
jpanel.setLayout(new GridBagLayout());
String[] columnNames ={"Variable","Valor"};
Object[][] data={};
DefaultTableModel model = new DefaultTableModel(data,columnNames);
String nombreConjunto = conjunto.getConjuntoResultados().get(i).getNombreResultado();contadorVariables ;
jpanel.setName(nombreConjunto);
for (int j=0;j<conjunto.getConjuntoResultados().get(i).getResultados().size();j ){
Object[] o = new Object[2];
String nombreVar = conjunto.getConjuntoResultados().get(i).getResultados().get(j).getNombre().replace(nombreConjunto "_", "");
o[0] = nombreVar;
if (conjunto.getConjuntoResultados().get(i).getResultados().get(j).getCadena()!=null){
o[1] = conjunto.getConjuntoResultados().get(i).getResultados().get(j).getCadena();
}else if (conjunto.getConjuntoResultados().get(i).getResultados().get(j).getDoble()!=null){
o[1] = conjunto.getConjuntoResultados().get(i).getResultados().get(j).getDoble();
}else if (conjunto.getConjuntoResultados().get(i).getResultados().get(j).getEntero()!=null){
o[1] = conjunto.getConjuntoResultados().get(i).getResultados().get(j).getEntero();
}
model.addRow(o);
}
jtable.setModel(model);
jtable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
JScrollPane tableContainer = new JScrollPane(jtable);
jpanel.setPreferredSize(new Dimension(cont.getVentanaResultados().getjTabbedPane2().getWidth()-50,contadorVariables*altoVentana));
jpanel.add(tableContainer, c);
jpArray.add(jpanel);
}
for (int k=0;k<jpArray.size();k ){
aniadirScrollpane(jpArray.get(k), tipoExperimento, cont);
}
this.getVentanaResultados().getjTabbedPane2().getSelectedIndex();
}
return contadorVariables;
}
Единственной причиной, которую я мог себе представить, была java jre, но это то же самое. Есть ли какая-либо причина, по которой таблица не загружается? Он показывает только заголовки и загружает только последнюю вкладку.
Спасибо!
Комментарии:
1. сколько JTables (и других J-компонентов) создается внутри if (!conjunto.getConjuntoResultados().isEmpty()){ ???
2. Откуда вы берете данные? База данных? Локальный файл? Откуда-нибудь из Интернета?
3. @mKorbel Это зависит от размера ConjuntoResultados(), я создам столько, сколько мне нужно. В этом случае я создаю три
4. я получаю данные из другого внешнего jar. Я храню их в локальном классе, созданном мной (ConjuntoResultados)
5. Можете ли вы более точно объяснить, как вы получаете данные? Мне кажется, что проблема есть. Потому что вы сказали, что отображается фрейм и заголовок, но только таблица пуста.