Staram się komfortowo z JTables, TableModels, JTableHeaders, renderujących itd Próbuję zrobić prosty atrapę tabeli (dla celów praktycznych), które wygląda następująco:Zmiana Swing JTable komórkowe Kolory
- 1 2 3
A A1 A2 A3
B B1 B2 B3
C C1 C2 C3
Chcę również, aby komórka B2 - i tylko ta komórka - miała niebieskie tło (Color.BLUE) - wszystkie pozostałe komórki mogą mieć domyślny kolor Swinga, do którego są przypisane automagicznie.
Mój kod znajduje się poniżej i jest oparty na niezliczonych przykładach, które znalazłem na tej stronie oraz w Internecie. Ale nie osiągam pożądanych rezultatów. Zamiast tego otrzymuję tabelę wyglądającą tak:
A A1 A2 A3
B B1 B2 B3
C C1 C2 C3
Zauważ, że pierwszego wiersza (nagłówka) w ogóle nie ma. Dodatkowo, z poniższym kodem I, to wykonuje i ustawia kolor komórek, które mają kolor, a nie tylko komórkę B2, którą chcę.
Kod:
public class MyTable
{
public static void main(String[] args)
{
String[][] data = getTableData();
String[] cols = getTableCols();
JFrame frame = magicallyCreateJFrame(); // I promise this works!
MyRenderer myRenderer = new MyRenderer(); // See below
DefaultTableModel defModel = new DefaultTableModel(data, cols);
JTable myTable = new JTable(defModel);
myTable.setDefaultRenderer(Object.class, myRenderer);
frame.add(myTable);
frame.pack();
frame.setVisible(true);
}
}
public static String[] getTableCols()
{
String cols =
{
"-",
"1",
"2",
"3",
};
}
public static String[][] getTableData()
{
String[][] data =
{
{
"A",
"A1",
"A2",
"A3",
},
{
"B",
"B1",
"B2",
"B3",
},
{
"C",
"C1",
"C2",
"C3",
},
};
return data;
}
A quick-n-brudne MyRenderer
klasa:
public class MyRenderer 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);
if(row == 2 && column == 2)
c.setBackground(new java.awt.Color(0, 0, 255));
return c;
}
}
Poza tym, że jest to straszne kod i łamie wiele „najlepszy ćwiczy "typowe wzorce i techniki (pamiętaj, że to jest po prostu coś, z czym się bawię), czy jest coś, co tutaj robię, to jest rażąco oczywiste? Dlaczego nie otrzymuję nagłówka tabeli (pierwszy wiersz "- 1 2 3")? Dlaczego mój domyślny mechanizm renderujący komórki nie działa w konkretnej komórce B2, którą określam?
JTables to dziwne, piękne i potężne bestie. Powoli otulam się moimi myślami, ale dławię się przy implementacji. Dzięki wszystkim, którzy mogą pomóc!
Nadal czekam na SSCCE ... – camickr
Zobacz także ten powiązany [przykład] (http://stackoverflow.com/a/12352838/230513). – trashgod