|
[ Ha-Nocri @ 30.04.2008. 21:03 ] @
| Znaci, prepisao sam prepareRednderer() metod klase JTable da bi obojio samo neke redove i to izgleda ovako:
Code: JTable table = new JTable() {
public Component prepareRenderer(TableCellRenderer renderer,
int rowIndex, int colIndex) {
JComponent c = (JComponent)super.prepareRenderer(renderer, rowIndex, colIndex);
if( kolicina == -1 )
c.setBackground( new Color(253, 233, 227) );
return c;
} }
Sta ja radim sa tom Tabelom: izbacim sve redove koji ne zadovoljavaju odredjeni logicki uslov, na to dodam neke nove redove koji imaju specificnu vrednost(-1) atributa "kolicina". Te redove sa kolicinom == -1 bojim u boju koju vidite u kodu, svetlo pink. Sve to radi sjajno. Medjutim dalje se vracam na prvobitno stanje tabele, znaci pre bilo kakvog izbacivanja ili dodavanja redova gde kolicine nigde nisu -1, i svi redovi bivaju obojeni u tu pink boju iako ne zadovoljavaju uslov da je kolicina == -1.
Da li neko mozda zna u cemu problem moze biti?
Hvala unapred
H |
[ bgd2500 @ 01.05.2008. 19:16 ] @
Proveri koju vrednost ima kolicina u pepareRenderer metodi. Dodaj else granu za slucaj kad kolicina nije -1 pa setuj pozadinu na belo/sivo ili koju vec hoces boju.
[ Ha-Nocri @ 01.05.2008. 23:25 ] @
Da da, to radi. Hvala. Ali nastaje novi problem koji sam ranije vec sretao i nisam znao da ga resim. Boja selekcije( JTable.setSelectionBackground() ) ne postoji. Nadam se da razumete. Kada selekrujem(kliknem na) neki red on je selektovan, ali boja se ne menja. Da li mozda da postavim novu temu za ovaj problem?
Inache, kod za prethodni deobi izgledao:
Code: JTable table = new JTable() {
public Component prepareRenderer(TableCellRenderer renderer,
int rowIndex, int colIndex) {
JComponent c = (JComponent)super.prepareRenderer(renderer, rowIndex, colIndex);
if( kolicina == -1 )
c.setBackground( new Color(253, 233, 227) );
else c.setBackground(mTable.getBackground());
return c;
}
};
[ Toxter @ 02.05.2008. 22:38 ] @
Treba ti custom CellEditor. Znaci klasa koja implementira TableCellEditor interfejs (ili prosiruje DefaultCellEditor klasu).
Pozdrav.
[ Ha-Nocri @ 04.05.2008. 22:18 ] @
Izvini, mozes li da budes precizniji? Zasto bi pravio svoj cellEditor za selektovanje redova da radi, ne kontam?
[ Toxter @ 05.05.2008. 07:56 ] @
Citat: Ha-Nocri: Izvini, mozes li da budes precizniji? Zasto bi pravio svoj cellEditor za selektovanje redova da radi, ne kontam?
Tacno, ne moras. Ja imam neki slozeniji projekat pa sam pravio custom celleditor i tu sam definisao pozadinu selekcije.
U tvom slucaju ti mozes da napravis samo custom TableCellRenderer.
Pozdrav
[ Ha-Nocri @ 05.05.2008. 12:29 ] @
Imam vec moj cellRenderer. Here it is:
Code: class IconedTableCellRenderer extends DefaultTableCellRenderer {
public void setValue(Object value) {
if (value instanceof IconData) {
IconData ivalue = (IconData)value;
setIcon(ivalue.mIcon);
setText(ivalue.mData.toString());
setIconTextGap(10);
}
else super.setValue(value);
}
}
U ovom primeru renderer je JLabel sa iconom i textom cisto radi razjasnjenja ako nekog zanima. IconData je moja cusstom clasa.
U kojoj metodi da definishem boju selekcije?
[ Toxter @ 05.05.2008. 12:42 ] @
U ovoj:
http://java.sun.com/j2se/1.4.2...bject,%20boolean,%20int,%20int)
ako je isSelected == true
tada vratis recimo JTextField kome setujes background.
Pozdrav
[ Ha-Nocri @ 05.05.2008. 15:19 ] @
Da, da. Ovo sam trebao da znam:
Code: class IconedTableCellRenderer extends DefaultTableCellRenderer {
public void setValue(Object value) {
if (value instanceof IconData) {
IconData ivalue = (IconData)value;
setIcon(ivalue.mIcon);
setText(ivalue.mData.toString());
setIconTextGap(10);
}
else super.setValue(value);
}
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);
if(isSelected) c.setBackground(table.getSelectionBackground());
else if(row%2 == 0) c.setBackground( new Color(240, 240, 240) );
else c.setBackground(table.getBackground());
return c;
}
}
Kao sto vidis obojio sam svaki drugi red i selekcija radi. Savrseno.Veliko hvala :-)
[ Ha-Nocri @ 05.05.2008. 15:49 ] @
Posto si pomenuo custom editor ima jedno pitanje uvezi editovanja celija, a da ne bih otvarao novu temu pitacu ovde.
Kako da znam kada se neka celija edituje? Na primer da postoji metoda izgledala bi nesto kao: cell.isBeingEdited() ili slicno.
U metodi getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) argument hasFocus je nesto drugo.
Ovo pitam zato sto bi voleo da vezem JPopupMenu sa celijom koja se edituje zbog "Copy", "Paste" i "Cut" opcija.
Nadam se da ste razumeli pitanje.
Hvala unapred
H
[ Ha-Nocri @ 05.05.2008. 21:55 ] @
Uradio, sam XD
Ako nekog zanima resenje nek kaze i postovacu ga...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|