简体   繁体   中英

Java override method from another class without inheritance

I found a similar question here:
overriding methods without subclassing in Java

But mine a little different, I have two classes, 1 GUI based, and the other just methods to modify elements in first class. If it just editing the basic function, I meet no problem, but now I want to override a jbutton in first class method from the second class without inheriting it. Where do I have to start?

I have temporary solution which is that the second class extends JButton, override method I want to, and add that class to my GUI class (anonymous object or not, is doesn't matter). But I want to discover a way to find a way to my question, is it even possible? Thanks :)

Edit
Here's sample code:

First class, as it only a button in jframe, I only add these in constructor:
ButtonOverrider bo=new ButtonOverrider(); -> this is the overrider class
button=bo.overridePaintComponent(bo); //first try
button=bo.overridePaintComponent(); //second try
bo.overridePaintComponent(bo); //third try

And here's the ButtonOverrider method:

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;
}

Where do I have to start?

With inheritance. That's the only way that overriding makes any sense. It's not clear why you don't want to use inheritance, but that really is the only way of overriding a method. Whether you use an anonymous class or a named one is irrelevant, but it must extend the class in order to override the method. That's simply the way overriding works in Java.

EDIT: The code you've shown in your updated question does use inheritance by creating an anonymous inner class... but it doesn't do what I expect you want it to, because it creates a new object rather than overriding the method on the existing object. Your parameter value is never used.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM