Учебная программа для школы моего сына по-прежнему включает в себя студентов, изучающих Java AWT. Хотя я и не думаю, что это лучший подход, я не могу его изменить, потому что он установлен Министерством образования. Во всяком случае, я стараюсь помогать своему сыну с его упражнениями, как я сам запрограммировал AWT много лет назад. Но у меня проблема с отображением меток. На самом деле мне нужно создать простую таблицу в AWT, так как таблицы отсутствуют. Подход состоит в том, чтобы взять сетку и добавить к ней метки. Это работает нормально, но я хотел, чтобы между столбцами и строками были разделительные линии. Поэтому я подклассировал ярлык и переписал краску следующим образом:
В классе таблицы я делаю
public class Table extends Container {
...
this.setLayout(new GridLayout(rows+1, cols));
for(int i=0; i<cols; i++) {
for(int y=0; y< rows; y++) {
TableLabel label = new TableLabel(rowData[i][y].toString());
add(label);
}
}
...
}
что относится к
public class TableLabel extends Label {
public TableLabel(String labelText) {
super(labelText);
}
public void paint(Graphics g) {
super.paint(g);
System.out.println("paint");
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.BLUE);
g2.drawRect(getX(), getY(), getWidth(), getHeight());
}
public void update(Graphics g) {
super.update(g);
System.out.println("update");
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(Color.BLUE);
g2.drawRect(getX(), getY(), getWidth(), getHeight());
}
}
Рендеринг не изменился. Согласно отладчику, ни краска, ни обновление никогда не вызываются. Кроме того, println не записывает данные на консоль. Что я упускаю? Приложение скомпилировано и работает под управлением Java 11. Я знаю, что AWT и версия 11 вроде как подключены, но это заданная настройка. Заранее спасибо.
@Override
. Может быть - я не уверен -drawRect(0, 0, ...
. Позвоните поsuper.paint
не нужно.