5

ここで同様の質問を見つけました:
Javaでサブクラス化せずにメソッドをオーバーライドする

しかし、私のものは少し異なります.2つのクラスがあり、1つはGUIベースで、もう1つはファーストクラスの要素を変更するためのメソッドです。基本的な機能を編集するだけなら問題ありませんが、継承せずに2番目のクラスから1番目のクラスのメソッドでjbuttonをオーバーライドしたいと考えています。どこから始めればよいですか?

2番目のクラスがJButtonを拡張し、必要なメソッドをオーバーライドし、そのクラスをGUIクラスに追加するという一時的な解決策があります(匿名オブジェクトかどうかは関係ありません)。しかし、私の質問への道を見つける方法を見つけたいのですが、それは可能ですか? ありがとう :)

編集
サンプルコードは次のとおりです。

最初のクラスは、jframe のボタンにすぎないため、コンストラクターにのみ追加します:
ButtonOverrider bo=new ButtonOverrider();-> これはオーバーライド クラスです
button=bo.overridePaintComponent(bo);//最初の試行
button=bo.overridePaintComponent();//2 番目の試行
bo.overridePaintComponent(bo);//3 番目の試行

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 に答える