Ich habe eine jTable
, wo es das Ergebnis einer Suche geladen wird, basierend auf einigen jComboBox
. Ich verwende DefaultTableModel
dafür, für die anderen jTables verwende ich TableModel
.Custom TableModel - Das gleiche Modell für alle Abfragen
Die Felder, die nach der Suche an der jTabelle angezeigt werden, sind immer gleich, aber wie kann ich eine TableModel
erstellen, die funktionieren würde, wenn die an der jTable angezeigten Felder nicht immer die gleichen wären? Ohne eines für jede mögliche Kombination zu schaffen?
Erstes Szenario Ich führe eine Suche basierend auf der jComboBox
und es gibt alle Daten und zeigt es auf jTable
. In der zweiten wähle ich, was ich von der object
zurückgegeben in einigen jRadioButtons
sehen möchte.
jTable
vom ersten Szenario.
[! [http://i.stack.imgur.com/FPElv.png][1]][1]
jTable
aus der zweiten Szenario.
Einer meiner 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 "";
}
}
}
Dank für jetzt.
Hier ist ein Teil des Verfahrens, wo ich arbeite:
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]}); } }
Aber die Spalten „ID“ und „Name“ zeigt es jedes Mal, wenn ich auf die Schaltfläche klicken dupliziert.
Verwenden Sie das [* Strategiemuster *] (https://en.wikipedia.org/wiki/Strategy_pattern). – trashgod
+1 für Strategie-Vorschlag (interessanter Ansatz). * In der zweiten wähle ich aus, was ich von dem Objekt sehen möchte, das in einigen jRadioButtons zurückgegeben wird. * Was ist mit dem Verstecken/Zeigen von Spalten wie benötigt, wie hier [hier] (http://stackoverflow.com/a/6796673/1795530) und [hier] (http: // stackoverflow.com/a/6798013/1795530)? – dic19
@ dic19: Ich auch [* finden Enums nützlich für die Umsetzung der Strategie Muster, *] (http://StackOverflow.com/a/15076852/230513) vor allem mit 'JComboBox'. – trashgod