пример здесь
аюсь освоиться с JTables, TableModels, JTableHeaders, рендерерами и т. Д. Я пытаюсь создать простую фиктивную таблицу (для практических целей), которая выглядит следующим образом:
- 1 2 3
A A1 A2 A3
B B1 B2 B3
C C1 C2 C3
Я также хочу, чтобы ячейка B2 - и только эта ячейка - имела синий фон (Color.BLUE) - все остальные ячейки могут иметь цвет по умолчанию Swing, который они назначают автоматически.
Мой код приведен ниже и основан на бесчисленных примерах, которые я нашел на этом сайте и в Интернете в целом. Но я не получаю желаемых результатов. Вместо этого я получаю таблицу, которая выглядит следующим образом:
A A1 A2 A3
B B1 B2 B3
C C1 C2 C3
Обратите внимание, что первая строка (заголовок) вообще отсутствует. Кроме того, с помощью приведенного ниже кода, он выполняется и устанавливает цветвсе клетки, которые окрашивают, а не только ячейку B2, которую я хочу.
Код:
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;
}
И быстрый-н-грязныйMyRenderer
класс:
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;
}
}
Помимо того, что этокакой ужас кодировать и ломать множество шаблонов и техник типа «лучших практик» (помните, что я просто играю с этим),Есть ли что-нибудь, что я делаю здесь, что очевидно?? Почему я не получаю заголовок таблицы (первая строка "- 1 2 3")? Почему мой рендерер ячеек по умолчанию не работает с указанной ячейкой B2?
JTables кажутся странными, красивыми и могущественными животными. Я медленно оборачиваюсь вокруг них, но задыхаюсь от реализации. Спасибо всем, кто может помочь!