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

时间:2016-04-06 20:24:05

标签: java swing jtable

我有jTable根据某些jComboBox加载了搜索结果。 我正在使用DefaultTableModel,对于我使用TableModel的其他jTables。

在搜索后显示在jTable上的字段总是相同的,但是如果jTable中显示的字段并不总是相同的话,如何创建一个TableModel?没有为每种可能的组合创建一个?

首先,我根据jComboBox执行搜索,然后返回所有数据并在jTable上显示。在第二部分中,我从object中返回的jRadioButtons中选择要查看的内容。

来自第一种情况的

jTable

[![http://i.stack.imgur.com/FPElv.png][1]][1]

来自第二种情况的

jTable

http://i.stack.imgur.com/g3qnj.png

我的一个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;每次我点击按钮。

1 个答案:

答案 0 :(得分:3)

  

在第二个我选择我想从一些jRadioButtons中返回的对象中看到的内容。

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

然后,您可以从TableColumn的{​​{1}}中删除TableColumnModel,以仅显示所需的列。

因此,如果您创建了第一张桌子,并且您不想看到&#34; Line&#34;您只需执行以下操作:

JTable

如果您需要重新显示&#34; Line&#34;然后,您可以将TableColumn添加回表的TableColumnModel。为此,您可以查看Table Column Manager这是一个有助于您使用table.removeColumn( table.getColumn( "Line" ) ); hideColumn(...)方法为您管理此类的课程。