Ahoj, narazil jsem na problem pri pokusu o prebarveni pozadi bunek u komponenty jTable. Puvodne jsem myslel, ze postaci najit nejakou metodu setBackground, ale to nefunguje. Pak jsem googlil a nasel renderery, jenze se mi nepodarilo pochopit, jak to funguje. Nenasel by se tu nekdo, kdo by mi to obecne objasnil?
Dival jsem se na nejake priklady od oraclu, tam extenduji tridu "DefaultTableCellRenderer". Jenze jsem z toho nepochopil jak to pracuje. Dival jsem se i v knihovne, ale v tech knizkach typu Java bez predchozich znalosti clovek nic nenajde.
Diky za kazdou radu
Fórum › Java
JTable pozadi bunky
To nervak : Zajima me, jak to pracuje. Jestli jsem to pochopil spravne, tak jTable ma defaultni renderer, ale ten neumi jednoduse nastavit pozadi vybrane bunky...teda tak to aspon chapu, protoze jinak nevidim duvod, proc by neexistovala konstrukce typu JTable table.setBackground(int row, int column, Color color).
No a tak si musis vytvorit vlastni, jak uz to tak v Jave byva, tak jen rozsirenim jiz existujici tridy DefaultTableCellRenderer.
Tam si vytvoris metodu public Component getTableCellRendererComponent... a do ni umistis svuj kod, ktery definuje zobrazeni, jako treba
if(isFocus)
setBackground(Color.green);
No a ja nasel priklad tady http://download.oracle.com/javase/tutorial/uiswing/components/table.html , konkretne nechapu tu cast:
public Component getTableCellRendererComponent(
JTable table, Object color,
boolean isSelected, boolean hasFocus,
int row, int column) {
Color newColor = (Color)color;
if (isSelected) setBackground(Color.BLACK);
if (isBordered) {
if (isSelected) {
if (selectedBorder == null) {
selectedBorder = BorderFactory.createMatteBorder(2,5,2,5,
table.getSelectionBackground());
}
setBorder(selectedBorder);
} else {
if (unselectedBorder == null) {
unselectedBorder = BorderFactory.createMatteBorder(2,5,2,5,
table.getBackground());
}
setBorder(unselectedBorder);
}
}
a pozdeji volani
table.setDefaultRenderer(Color.class, new ColorRenderer(true));
.
Proc se predava jako prvni parametr Color.class ?
Kdyby existovalo nějaké setBackground pro každou buňku, tak bys vlastně chtěl po jTable, aby si pamatovala nastavení barvy pro každou z nich. Což je maximálně neefektivní neb měnit barvy nebudou všichni, takže je lepší to dělat tak, že si barvy měníš je tam, kde to potřebuješ - render. Prostě ty barvy definuješ ve chvíli (svým programem), kdy jsou potřeba. Což ti to umožňuje je snadno dynamicky měnit.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Jak obarvit pozadí buňky s textem dle hodnoty — založil Tomasx
JTable filtrovanie — založil otaznik
Hlavička tabulky JTable — založil Honza
Pomoc s komponentou jTable — založil king_2
JTable vypis do souboru — založil roman.jaros
Moderátoři diskuze