我在这里发现了一个类似的问题:
overriding methods without subclassing in Java
但我的有点不同,我有两个类,一个基于GUI,另一个只是修改第一类元素的方法。如果它只是编辑基本函数,我没有遇到任何问题,但现在我想从第二个类中覆盖第一类方法中的jbutton而不继承它。我在哪里开始?
我有临时解决方案,即第二个类扩展JButton,覆盖我想要的方法,并将该类添加到我的GUI类(匿名对象与否,无所谓)。但我想找到一种方法来找到解决问题的方法,甚至可能吗?谢谢:))
修改
这是示例代码:
第一堂课,因为它只是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;
}
答案 0 :(得分:7)
我必须从哪里开始?
继承。这是压倒任何理由的唯一方法。目前尚不清楚为什么你不想使用继承,但这确实是覆盖方法的唯一方法。无论您使用匿名类还是命名类都是无关紧要的,但必须扩展该类才能覆盖该方法。这就是覆盖Java的工作方式。
编辑:您在更新后的问题中显示的代码通过创建匿名内部类来使用继承......但它没有按照我的预期执行,因为它创建 new 对象,而不是覆盖现有对象上的方法。永远不会使用您的参数值。