Я пытаюсь освоиться с 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 кажутся странными, красивыми и могущественными животными. Я медленно оборачиваюсь вокруг них, но задыхаюсь от реализации. Спасибо всем, кто может помочь!