ボタンクリックハンドラ関数がある場合、参照名(たとえばminimize_buttonまたはmaximize_button)によってクリックされたボタンを識別でき、NOTを使用して識別できます。
ローカル変数を宣言された名前で参照する方法
minimize_button.setName("minimize_button");
class Game extends JFrame
{
public Game()
{
JButton minimize_button = new JButton();
minimize_button.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent mouse)
{
setWindowState(mouse);
}
});
JButton maximize_button = new JButton();
maximize_button.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent mouse)
{
setWindowState(mouse);
}
});
}
private void setWindowState(MouseEvent mouse)
{
int window_state = Game.this.getExtendedState();
JButton button = (JButton)mouse.getComponent();
if (button == minimize_button)
{
if (window_state == JFrame.NORMAL || window_state == JFrame.MAXIMIZED_BOTH)
window_state = JFrame.ICONIFIED;
}
else if (button == maximize_button)
{
if (window_state == JFrame.NORMAL)
window_state = JFrame.MAXIMIZED_BOTH;
else if (window_state == JFrame.MAXIMIZED_BOTH)
window_state = JFrame.NORMAL;
}
Game.this.setExtendedState(window_state);
}
}
注:私はクラス変数として宣言する必要はありません
編集:なぜ私はコードを複製したくないので(下記参照)、1つの関数でボタンのクリックを処理する必要があるのです。私は次のことをしたくない:
class Game extends JFrame
{
public Game()
{
JButton minimize_button = new JButton();
minimize_button.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent mouse)
{
int window_state = Game.this.getExtendedState();
if (window_state == JFrame.NORMAL || window_state == JFrame.MAXIMIZED_BOTH)
Game.this.setExtendedState(JFrame.ICONIFIED);
}
});
JButton maximize_button = new JButton();
maximize_button.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent mouse)
{
int window_state = Game.this.getExtendedState();
if (window_state == JFrame.NORMAL)
window_state = JFrame.MAXIMIZED_BOTH;
else if (window_state == JFrame.MAXIMIZED_BOTH)
window_state = JFrame.NORMAL;
Game.this.setExtendedState(window_state);
}
});
}
}
注:親切「ああ、あなたはこのようにそれを行う必要があり、」コメントを控えます。私が知りたいのは、参照名で変数を参照できるかどうかです。もしそうなら、どうですか?上記の例のリフレクションはうまくいきません、私が述べたように、私はそれらをクラス変数として宣言したくありません。
https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.htmlをご覧ください。 – randominstanceOfLivingThing
(1-)重複コードは何ですか?私が見る唯一の重複コードは、拡張状態の取得/設定です。あなたがしていることをする理由はありません。あなたは本当にプロセス全体を複雑にしています。リスナーの最小化と最大化は、それぞれ異なる機能を含んでおり、単一のリスナーに結合すべきではありません。 JButtonでMouseListenerを使用してはいけません。あなたは 'ActionListener'を使うべきです。 – camickr
@camickr、あなたは正しいですが、1つの設定だけが変更されています。しかし、私が指摘したように、上記は一例にすぎません。ウィンドウの状態が変更されるたびにいくつか変更が加えられます。 「あなたは...を使用しているはずです」に関しては、下をお読みください。 – johnny