Nonostante le ricerche nel web non sono riuscito a capire come fare ad inserire in una colonna della JTabel i flag booleani!!!
Ho bisogno di un esempio sul mio codice, che vi spiego e posto di seguito.
Nel codice richiamo più volte la costruzione di tabelle JTable e per questo ho creato la classe Tables che a seconda dei parametri passati al costruttore restituisce la tabella del caso.
Invoco la costruzione della tabella:
Di seguito la classe Tables con il costruttore che ci interessa in questo caso, invocato con il passaggio del parametro di tipo int:codice:JTable tablePagato = new Tables(numeroBolletta).drawTable(); panUP.add(new JScrollPane(tablePagato));
Poi ho la classe TableModel, dove a secondo dei valori o meno che assegno ad alcune variabili nei costruttori della classe Table, ottengo la formattazione delle tabelle, come colore di backgroung delle righe, colore testo etc...codice:package tabelle; import java.awt.Dimension; import javax.swing.JRadioButton; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import calcoliBolletta.CalcoliBolletta; import database.Condomini; import database.Millesimi; import utility.Arrotondamenti; import utility.Decimali; import utility.LeggiDataPagato; import utility.LeggiPagato; public class Tables { final DefaultTableModel model = new DefaultTableModel(); private JTable table = new JTable(model); private String[] condomino = Condomini.getElencoCognome(); private int numRow; private Object[][] datiColonna; private Object[] lastRow; private Object[] columnHeaders; private int[] misureColonne; private int dimX; private int dimY; private String evidenziaRow = null; private String coloreRow = null; [.....] // OPERAZIONI AGGIUNTIVE: PAGATO SI/NO public Tables(int numeroBolletta) { String pagato = new LeggiPagato().leggi(numeroBolletta); String dataPagato = new LeggiDataPagato().leggi(numeroBolletta); columnHeaders = new Object[] {"PAGATO","CHECK",}; numRow = 2; datiColonna = new String[columnHeaders.length][numRow]; // PRIMA colonna 0 datiColonna[0][0] = "SI"; datiColonna[0][1] = "NO"; // SECONDA colonna 1 datiColonna[1][0] = pagato; datiColonna[1][1] = pagato; lastRow = new Object[] {"DATA:",dataPagato}; misureColonne = new int[] {80,80}; dimX = 160; dimY = 48; draw(); } // FINE METODO [.....] public void draw() { table.setPreferredScrollableViewportSize(new Dimension(dimX,dimY)); table.setFillsViewportHeight(true); table.setColumnSelectionAllowed(false); table.getTableHeader().setReorderingAllowed(false); // SPOSTAMENTO DELLE COLONNE table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.setAutoResizeMode(0); //AUTO RESIZE OFF table.setEnabled(false); TableColumn colonna = null; // DATI JTABLE for(int i=0; i<columnHeaders.length; i++) { model.addColumn("<html>"+columnHeaders[i]+"</html>", datiColonna[i]); } for(int i=0; i<numRow; i++) { for(int x=0; x<model.getColumnCount(); x++) { table.getColumnModel().getColumn(x).setCellRenderer(new TableModel(numRow,evidenziaRow,coloreRow));// SETUP TABELLA } } model.addRow(lastRow); // ULTIMA RIGA //SETUP delle COLONNE for(int i=0; i<columnHeaders.length; i++) { // IMPOSTAZIONI COLONNE colonna = table.getColumnModel().getColumn(i); colonna.setResizable(false); colonna.setPreferredWidth(misureColonne[i]); } } // FINE METODO public JTable drawTable() { return table; } // FINE METODO } // FINE CLASSE
Volendo realizzare la semplice tabella come nel codice sopra postato della classe Tables, con sole due colonne e tre righe, dove al fianco delle celle con la scritta SI e NO, a secondo del valore della variabile "pagato" (Si/NO oppure TRUE/FALSE) mi appaia il flag booleano spuntato o meno, come posso fare!?codice:package tabelle; import java.awt.Color; import java.awt.Component; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; public class TableModel extends DefaultTableCellRenderer { /** * */ private static final long serialVersionUID = 1L; private String[] checkRed; private int lastRow; private String evidenziaRow,coloreRow; public TableModel(String[] checkRed) { this.checkRed = checkRed; } public TableModel(int lastRow, String evidenziaRow, String coloreRow) { this.checkRed = null; this.lastRow = lastRow; this.evidenziaRow = evidenziaRow; this.coloreRow = coloreRow; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); setOpaque(true); label.setHorizontalAlignment(SwingConstants.CENTER); // COLORE ALTERNATO RIGHE if (row%2 == 0) { label.setBackground(Color.WHITE); } else { label.setBackground(new Color(232,242,254)); } // SFONDO DIVERSO PER LE TABLE CHE NON CHIAMANO IL CHECK (CIOE' DIVERSE DAL RegistroCassa) if (checkRed == null) { if (row == lastRow) label.setBackground(new Color(173,255,47)); if (evidenziaRow != null) { // evidenzia la riga del condomino nella table millesimi!!! if (row == Integer.parseInt(evidenziaRow)-1) label.setBackground(new Color(250,150,0)); } if (coloreRow != null) { // colora le righe delle tabelle AGGIUNTE/DETRAZIONI if (coloreRow.equals("DETRAZIONI")) {label.setForeground(Color.RED); } else { label.setForeground(Color.BLUE); } } } // SCRITTA ROSSA PER LE VOCI OUT se richiamata nel costruttore if (checkRed != null) { if (Boolean.parseBoolean(checkRed[row])) { label.setForeground(Color.RED); } else { label.setForeground(Color.BLUE); } } // COLORE RIGA SELEZIONATA if (isSelected) label.setBackground(Color.LIGHT_GRAY); return label; } }
Grazie a Tutti per l'attenzione![]()

Rispondi quotando