我正在尝试覆盖默认的 java Button 行为并尝试向按钮添加其他标签。我是 Java GUI 的新手,并认为覆盖绘制方法可以解决我的问题,但是当我这样做并在 Button 绘制方法中绘制附加标签时,它看起来不错,但是如果我在应用程序中单击该按钮,我的标签就会消失。
我试图找到一些关于如何覆盖 java.awt.Component 的教程,但找不到任何东西。谢谢。
我正在尝试覆盖默认的 java Button 行为并尝试向按钮添加其他标签。我是 Java GUI 的新手,并认为覆盖绘制方法可以解决我的问题,但是当我这样做并在 Button 绘制方法中绘制附加标签时,它看起来不错,但是如果我在应用程序中单击该按钮,我的标签就会消失。
我试图找到一些关于如何覆盖 java.awt.Component 的教程,但找不到任何东西。谢谢。
这是一个描述绘画如何在 awt中工作的页面,可能会有所帮助。但是,如果您只是为按钮添加一个额外的标签,您应该考虑将子类化更改为composition。它更安全。您的复合类可以扩展 Component 并定义它自己的绘制方法。
class MyButton extends Component {
private Button button;
private Label label;
public MyButton(String label, String buttonLabel) {
label = new Label(label);
button = new Button(buttonLabel);
}
public paint(Graphics g) {
label.paint(g);
button.paint(g);
}
...
}
您不能真正覆盖基本 AWT 控件中的“绘制”并且仍然让它们正常工作,因为例如在 Button 中,大部分绘制行为是由对等类(例如 Windows 中的 WButton)完成的。我在 1.1.x 中为 OS/2 JVM 编写了许多 AWT 控件,我无法想象这会按照您希望的方式工作,除非 AWT 发生了巨大变化(不太可能)。
如果您想在这种情况下真正控制绘画,您需要自己滚动或使用 Swing 按钮,然后探索“UI 组件”(负责绘画控件等的委托对象 - “外观和感觉”当时正在使用)。
基本上,AWT 控件是“本机”的——即那里有一个真正的 Windows 按钮和一些围绕它的 java 代码。Swing 控件是“纯 java”;但是将它们的大部分行为和几乎所有外观都委托给外观包中的 UI 控制器。