Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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;
}
share|improve this question
can you post minimal sample code showing what you want – RC. 25 mins ago
overriding in its formal sense not possible without subclassing in my humble opinion – pinkpanther 23 mins ago
@RC. question updated – A-SM 4 mins ago

1 Answer

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.

share|improve this answer
Not event the code I post in edit could do something close? – A-SM 4 mins ago
@A-SM: That is using inheritance. That's an anonymous inner class - you're extending JButton. But you're also completely ignoring the parameter - it's creating a new button. – Jon Skeet 3 mins ago

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.