gpt4 book ai didi

java - 自定义 TableModel - 所有查询的模型相同

转载 作者:行者123 更新时间:2023-12-01 21:41:00 26 4
gpt4 key购买 nike

我有一个jTable,它根据一些jComboBox加载搜索结果。我使用 DefaultTableModel 来实现此目的,对于其他 jTable,我使用 TableModel

搜索后,jTable 中显示的字段始终相同,但是如果 jTable 中显示的字段并不总是相同,我如何创建一个可以工作的 TableModel ?无需为每种可能的组合创建一个?

第一个场景我基于jComboBox执行搜索,它返回所有数据并将其显示在jTable上。在第二个中,我选择我想从某些jRadioButtons返回的对象中看到的内容。

第一个场景中的

jTable

[![ /image/FPElv.png][1]][1]

第二个场景中的

jTable

/image/g3qnj.png

我的一个TableModel:

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import modelo.Setor;

public class ModeloSetor extends AbstractTableModel {

private List<Setor> setores;

public ModeloSetor() {
setores = new ArrayList<Setor>();
}

@Override
public int getRowCount() {
return setores.size();
}

@Override
public int getColumnCount() {
return 2;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Setor setor = setores.get(rowIndex);
switch (columnIndex) {
case 0:
return setor.getId();
case 1:
return setor.getNome();
default:
return "";
}
}

public void adicionar(Setor setor) {
setores.add(setor);
fireTableRowsInserted(setores.size() - 1, setores.size() - 1);
}

public void remover(Setor setor) {
setores.remove(setor);
fireTableRowsInserted(setores.size() - 1, setores.size() - 1);
}

public Setor getSetor(int linha) {
return setores.get(linha);

}

public ModeloSetor(List<Setor> lista) {
this();
setores.addAll(lista);
}

public void adicionaLista(List<Setor> lista) {
int i = setores.size();
setores.addAll(lista);
fireTableRowsInserted(i, i + lista.size());
}

public void limpaLista() {
if (setores.size() > 0) {
int i = setores.size();
setores.clear();
fireTableRowsDeleted(0, i - 1);
}
}

@Override
public String getColumnName(int coluna) {
switch (coluna) {
case 0:
return "Id";
case 1:
return "Nome";
default:
return "";

}
}

}

现在谢谢。

这是我正在工作的方法的一部分:

  private void jButtonSearchActionPerformed(java.awt.event.ActionEvent evt) {        


jTableResultado.getColumnModel().getColumn(0).setMaxWidth(50);
jTableResultado.getColumnModel().getColumn(1).setPreferredWidth(180);
jTableResultado.getColumnModel().getColumn(2).setPreferredWidth(250);
jTableResultado.getColumnModel().getColumn(3).setPreferredWidth(310);
jTableResultado.getColumnModel().getColumn(4).setPreferredWidth(100);
jTableResultado.getColumnModel().getColumn(5).setPreferredWidth(250);
jTableResultado.getColumnModel().getColumn(6).setPreferredWidth(150);
jTableResultado.getColumnModel().getColumn(7).setPreferredWidth(150);
jTableResultado.getColumnModel().getColumn(8).setPreferredWidth(100);
jTableResultado.getColumnModel().getColumn(9).setPreferredWidth(100);
PersonDao personDao = new PersonDao();
Person person= new Person();
Condutor condutor = new Condutor();

DefaultTableModel modelo = (DefaultTableModel) jTableResultado.getModel();
modelo.setNumRows(0);

TableColumnManager tcm = new TableColumnManager(jTableResultado);
Date dataInicial = (dataInicialParaInserir(jTDataInicial.getText()));
Date dataFinal = (dataFinalParaInserir(jTDataFinal.getText()));

if (jRadioCodigoPerson.isSelected()) {
tcm.hideColumn("Id");
} else {
tcm.showColumn("Id");
}
if (jRadioNamePerson.isSelected()) {
tcm.hideColumn("Name");
} else {
tcm.showColumn("Name");
}


List<Object[]> listaObjetos = personDao.consultarDataParametros(person, dataInicial, dataFinal,
condutor);
for (Object[] t : listaObjetos) {

modelo.addRow(new Object[]{t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9]});
}

}

但是,每次我单击按钮时,它都会显示重复的“Id”和“Name”列。

最佳答案

In the second i select what i want to see from the object returned in some jRadioButtons.

您始终执行查询以返回所有可能的数据。

然后,您可以从 JTableTableColumnModel 中删除 TableColumn,以仅显示您想要的列。

因此,如果您创建第一个表并且不想看到“Line”列,则只需执行以下操作:

table.removeColumn( table.getColumn( "Line" ) );

如果您需要重新显示“Line”列的能力,那么您只需将 TableColumn 添加回表的 TableColumnModel 即可。为此,您可能需要查看 Table Column Manager该类将通过使用 hideColumn(...)showColumn(...) 方法帮助您管理此操作。

关于java - 自定义 TableModel - 所有查询的模型相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36461605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com