2013-06-08 2 views
4

Я нашел аналогичный вопрос здесь:
overriding methods without subclassing in JavaJava метод коррекции из другого класса без наследования

Но моего немного по-другому, у меня есть два класса, на основе 1 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

вы можете разместить минимальный образец кода, показывающий, что вы хотите –

+0

'overriding' в своем формальном смысле невозможен без подкласса по моему скромному мнению – pinkpanther

+0

@RC. вопрос обновлен –

ответ

7

Где я должен начать?

С наследованием. Это единственный способ, который переопределяет смысл. Неясно почему вы не хотите использовать наследование, но это действительно единственный способ переопределить метод. Если вы используете анонимный класс или именованный, это не имеет значения, но он должен расширить класс, чтобы переопределить метод. Это просто способ переопределения на Java.

EDIT: Код вы показали в обновленном вопросе делает использовать наследование, создавая анонимный внутренний класс ... но это не то, что я ожидаю, что вы хотите его, потому что он создает новый объект вместо того, чтобы переопределять метод на существующий объект. Значение параметра никогда не используется.

+0

Не событие, которое код, который я публикую в редактировании, может сделать что-то близко? –

+0

@ A-SM: Это * * использование наследования. Это анонимный внутренний класс - вы расширяете 'JButton'.Но вы также полностью игнорируете параметр - он создает кнопку * new *. –

+0

: x У меня не было идеи, было ли это наследование, но если это так, тогда должен быть способ сделать то, что я пишу в своем вопросе правильно? Этот код ничего не меняет в моей кнопке. –

Смежные вопросы