我有jTable
根据某些jComboBox
加载了搜索结果。
我正在使用DefaultTableModel
,对于我使用TableModel
的其他jTables。
在搜索后显示在jTable上的字段总是相同的,但是如果jTable中显示的字段并不总是相同的话,如何创建一个TableModel
?没有为每种可能的组合创建一个?
首先,我根据jComboBox
执行搜索,然后返回所有数据并在jTable
上显示。在第二部分中,我从object
中返回的jRadioButtons
中选择要查看的内容。
jTable
。
[![http://i.stack.imgur.com/FPElv.png][1]][1]
来自第二种情况的 jTable
。
我的一个TableModels
:
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]}); } }
但是,它显示了重复的列&#34; Id&#34;和&#34;姓名&#34;每次我点击按钮。
答案 0 :(得分:3)
在第二个我选择我想从一些jRadioButtons中返回的对象中看到的内容。
您始终执行查询以返回所有可能的数据。
然后,您可以从TableColumn
的{{1}}中删除TableColumnModel
,以仅显示所需的列。
因此,如果您创建了第一张桌子,并且您不想看到&#34; Line&#34;您只需执行以下操作:
JTable
如果您需要重新显示&#34; Line&#34;然后,您可以将TableColumn添加回表的TableColumnModel。为此,您可以查看Table Column Manager这是一个有助于您使用table.removeColumn( table.getColumn( "Line" ) );
和hideColumn(...)
方法为您管理此类的课程。