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

标签 java swing jtable

我有一个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/

相关文章:

java - 从单独类中的监听器禁用 JButton

java - JTable计算器

java - 可以做什么来优化给定的代码

java - Sonar + Lombok @Data批注上的误报

windows - 不带参数的Ant设置platforms.JDK_1.6.home

java - 重写和隐藏父类(super class)的静态方法有什么区别

java - JFrame + JDialog 到 JFrame

java swing 从不同线程的 JTextField 获取值

java - 带按钮的 table

java - 如何使列中的单元格不可选择