5

我在这里发现了一个类似的问题:
overriding methods without subclassing in Java

但我的有点不同,我有两个类,一个基于 GUI,另一个只是修改第一类元素的方法。如果它只是编辑基本功能,我遇到没有问题,但现在我想从第二类覆盖第一类方法中的 jbutton 而不继承它。我必须从哪里开始?

我有一个临时解决方案,即第二个类扩展 JButton,覆盖我想要的方法,并将该类添加到我的 GUI 类(匿名对象与否,无关紧要)。但是我想找到一种方法来解决我的问题,这甚至可能吗?谢谢 :)

编辑
这里的示例代码:

第一类,因为它只是 jframe 中的一个按钮,我只在构造函数中添加这些:
ButtonOverrider bo=new ButtonOverrider();-> 这是覆盖类
button=bo.overridePaintComponent(bo);//first try
button=bo.overridePaintComponent();//second try
bo.overridePaintComponent(bo);//third try

这是 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;
}
4

1 回答 1

7

我必须从哪里开始?

与继承。这是覆盖有意义的唯一方法。不清楚为什么不想使用继承,但这确实是覆盖方法的唯一方法。无论您使用匿名类还是命名类都无关紧要,但它必须扩展类才能覆盖该方法。这就是 Java 中覆盖的工作方式。

编辑:您在更新的问题中显示的代码确实通过创建一个匿名内部类来使用继承......但它并没有按照我的期望做,因为它创建了一个对象而不是覆盖上的方法现有的对象。永远不会使用您的参数值。

于 2013-06-08T08:55:12.403 回答