代码之家  ›  专栏  ›  技术社区  ›  Maksim Vi.

重写java.awt.Button

  •  0
  • Maksim Vi.  · 技术社区  · 15 年前

    我试图覆盖默认的java按钮行为,并尝试向按钮添加额外的标签。我不熟悉JavaGUI,认为重写paint方法可以解决我的问题,但当我这样做并在ButtonPaint方法中绘制额外的标签时,它看起来很好,但如果我在应用程序中单击该按钮,我的标签就会消失。

    谢谢

    2 回复  |  直到 15 年前
        1
  •  0
  •   crunchdog    15 年前

    这是 a page describing how painting works in awt 这可能会有帮助。但是,如果您只需在按钮上添加一个额外的标签,您就应该考虑将子类更改为 composition . 这样更安全。您的复合类可以扩展组件并定义它自己的绘制方法。

    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);
        }
    
        ...
    }
    
        2
  •  0
  •   M1EK    15 年前

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