3

Java現在、自分自身を向上させるために勉強中です。メインウィンドウ、メニュー、およびサブメニューを持つプログラムがあります。

サブメニューをクリックすると、他のウィンドウが表示されます。

それらの 1 つは setRates です。

public SetMyRates(){
    JPanel dataPanel = new JPanel(new GridLayout(2, 2, 12, 6));
    dataPanel.add(setTLLabel);
    dataPanel.add(setDollarsLabel);
    dataPanel.add(setTLField);
    dataPanel.add(setDollarsField);
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(closeButton);
    buttonPanel.add(setTLButton);
    buttonPanel.add(setDollarsButton);
    Container container = this.getContentPane();
    container.add(dataPanel, BorderLayout.CENTER);
    container.add(buttonPanel, BorderLayout.SOUTH);
    setTLButton.addActionListener(new SetTL());
    setDollarsButton.addActionListener(new SetDollars());
    closeButton.addActionListener(new closeFrame());
    dataPanel.setVisible(true);
    pack();
}

をクリックするとそのウィンドウが閉じますcloseButton

私はcloseButton、actionListenerのクラスを作成しました:

private class closeFrame implements ActionListener{
    public void actionPerformed(ActionEvent e){
       try{
          dispose();
       }
       catch(Exception ex){
          JOptionPane.showMessageDialog(null, "Please enter correct Rate.");
       }
    }
}

しかし、そのボタンをクリックすると、サブメニュー ウィンドウではなくメイン ウィンドウが閉じます。問題を解決するにはどうすればよいですか?

4

2 に答える 2

6

閉じたいウィンドウへの参照を取得し、dispose()その参照を直接呼び出す必要があります。これをどのように行うかは、プログラムの詳細によって異なります。現在のところ、この情報には関与していません。

編集:その参照を取得する1つの方法は、経由SwingUtilities.getWindowAncestor(...)です。ActionEvent オブジェクトから返された JButton 参照を渡し、dispose を呼び出します。何かのようなもの...

public void actionPerformed(ActionEvent e) {
  Object o = e.getSource();
  if (o instanceof JComponent) { 
    JComponent component = (JComponent)o; 
    Window win = SwingUtilities.getWindowAncestor(component);
    win.dispose();
  }
}
  • 注意: コードはコンパイルも実行もテストもされていません。
  • また、これが機能するためには、ActionListener を保持してアクティブ化するコンポーネントが、閉じるウィンドウに存在する必要があることに注意してください。そうでない場合、これは機能しません。
于 2012-05-05T13:44:04.517 に答える
4

別のウィンドウを開くときに簡単にできると思うことから、それへの参照を保存してアクションリスナー内で使用するだけです。これらの行に沿ったもの:

JFrame openedWindow;

//inside the listener
if(openedWindow)
   openedWindow.dispose();
else dispose();
于 2012-05-05T13:47:04.520 に答える