我在这里发现了类似的问题:
Java 中无需子类化即可重写方法
但我的有点不同,我有两个类,一个基于 GUI,另一个只是修改第一类中元素的方法。如果它只是编辑基本功能,我不会遇到任何问题,但现在我想从第二类重写第一类方法中的 jbutton 而不继承它。我必须从哪里开始?
我有临时解决方案,即第二个类扩展 JButton,重写我想要的方法,并将该类添加到我的 GUI 类中(是否是匿名对象,并不重要)。但我想找到一种方法来解决我的问题,这可能吗?谢谢 :)
Edit
这是示例代码:
第一类,因为它只是 jframe 中的一个按钮,我只在构造函数中添加这些:
ButtonOverrider bo=new ButtonOverrider();
-> 这是覆盖类
button=bo.overridePaintComponent(bo);
//第一次尝试
button=bo.overridePaintComponent();
//第二次尝试
bo.overridePaintComponent(bo);
//第三次尝试
这是 ButtonOverrider 方法:
public JButton ButtonOverrider(JButton button) {
button = new JButton() {
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
GradientPaint gp = new GradientPaint(0, 0,
Color.blue.brighter().brighter(), 0, getHeight(),
getBackground().darker().darker());
g2.setPaint(gp);
g2.fillRect(0, 0, getWidth(), getHeight());
g2.dispose();
super.paintComponent(g);
super.setContentAreaFilled(false);
super.setFocusPainted(false);
super.setBorder(new LineBorder(Color.yellow, 2));
super.setText("Shuro");
}
};
return button;
}
我必须从哪里开始?
具有继承性。这是覆盖有意义的唯一方式。尚不清楚why您不想使用继承,但这确实是重写方法的唯一方法。使用匿名类还是命名类并不重要,但它must扩展类以覆盖该方法。这就是 Java 中重写的工作方式。
编辑:您在更新的问题中显示的代码does通过创建匿名内部类来使用继承...但它并没有达到我期望的效果,因为它创建了一个new对象而不是重写方法existing目的。您的参数值从未被使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)