【发布时间】:2022-01-02 04:57:54
【问题描述】:
我儿子学校的课程仍然包括学习 Java AWT 的学生。虽然我觉得这不是最好的办法,但我也改不了,因为这是教育部规定的。无论如何,我试着帮助我儿子练习,就像我多年前自己编写的 AWT 一样。但是我在渲染标签时遇到了问题。我实际上是在 AWT 中创建一个简单的表,因为缺少表。方法是采用 GridLayout 并向其添加标签。这很好用,但我希望在列和行之间有分隔线。因此,我对标签进行了子分类并像这样覆盖了油漆:
在我做的 Table 类中
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 有点连线,但这是给定的设置。提前谢谢你。
【问题讨论】:
-
这里有一个关于 AWT 的快速教程,我正在看这个,也许会有帮助。上面的代码是否重现了问题? oracle.com/java/technologies/painting.html
-
我想在列和行之间有分隔线。 - 阅读
GridLayoutAPI。您可以指定组件之间的水平/垂直间距。因此面板的背景将显示为您的线条。 -
你的绘画代码不正确:1)不需要重写update()。所有的绘画都是在paint() 方法中完成的。 2)绘画是相对于组件完成的,而不是面板。所以 x/y 值应该是 0,你需要从宽度/高度中减去 1。
标签: java inheritance awt paint