Vorrei fare in modo che se una delle colonne e' settata a un certo valore, tutta la corrispondente riga venga sbarrata. Si puo' fare?
Vorrei fare in modo che se una delle colonne e' settata a un certo valore, tutta la corrispondente riga venga sbarrata. Si puo' fare?
Innanzitutto precisa bene cosa intendi per "sbarrata".Originariamente inviato da mxa
Vorrei fare in modo che se una delle colonne e' settata a un certo valore, tutta la corrispondente riga venga sbarrata. Si puo' fare?
Che una cella sia riempita con tante linee oblique ///// ? O che ci sia una sola linea che va da un angolo a quello opposto della cella?
Comunque, a parte ciò che si deve vedere graficamente, la questione è la solita: JTable si basa sui "renderer" per visualizzare le celle. Il fatto però è che nel tuo caso il valore in una colonna va ad impattare su tutte le celle in quella riga.
Pertanto la vedrei un po' complicata/brutta pensare di fare dei renderer appositi. Si potrebbe invece estendere JTable e fare l'override di prepareRenderer(). Se quella certa colonna nella riga richiesta ha un certo valore, si fa ritornare non il Component fornito dal renderer "ufficiale" passato a questo prepareRenderer() ma si restituisce un componente ad-hoc che magari semplicemente disegna le sbarre.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Indendo una linea orizzontale che va da sinistra a destra di tutta la riga.
Per adesso avevo fatto un renderer che mi colora tutta la riga di rosso:
ma mi chiedevo se fosse facilmente modificabile per ottenere l'effetto che volevo.codice:private class MyTableCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column); Object ignored = _tmodel.getValueAt (row, REF_IGNORED_COLUMN); if (ignored != null && ((String) ignored).equals ("YES")) { c.setBackground (Color.RED); } else { if (!isSelected) { c.setBackground(Color.WHITE); } } return c; } }