0

我正在尝试覆盖默认的 java Button 行为并尝试向按钮添加其他标签。我是 Java GUI 的新手,并认为覆盖绘制方法可以解决我的问题,但是当我这样做并在 Button 绘制方法中绘制附加标签时,它看起来不错,但是如果我在应用程序中单击该按钮,我的标签就会消失。

我试图找到一些关于如何覆盖 java.awt.Component 的教程,但找不到任何东西。谢谢。

4

2 回答 2

0

这是一个描述绘画如何在 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);
    }

    ...
}
于 2009-08-31T05:40:22.057 回答
0

您不能真正覆盖基本 AWT 控件中的“绘制”并且仍然让它们正常工作,因为例如在 Button 中,大部分绘制行为是由对等类(例如 Windows 中的 WButton)完成的。我在 1.1.x 中为 OS/2 JVM 编写了许多 AWT 控件,我无法想象这会按照您希望的方式工作,除非 AWT 发生了巨大变化(不太可能)。

如果您想在这种情况下真正控制绘画,您需要自己滚动或使用 Swing 按钮,然后探索“UI 组件”(负责绘画控件等的委托对象 - “外观和感觉”当时正在使用)。

基本上,AWT 控件是“本机”的——即那里有一个真正的 Windows 按钮和一些围绕它的 java 代码。Swing 控件是“纯 java”;但是将它们的大部分行为和几乎所有外观都委托给外观包中的 UI 控制器。

于 2009-09-02T20:20:13.003 回答