2017-12-21 38 views
0

:私は、同等の機能を見つけることができませんでしたJava SWINGのJFramesのWindowsFormsのDialogResultプロパティに相当するものは何ですか?私は、Java Swingライブラリを使用してJavaでアプリケーションを書いているとWindowsFormsを使ってC#のコードのこれらの行と同等の機能を探しています

MyDialog form = new MyDialog(); 
form.showDialog(); 

if (form.DialogResult == DialogResult.OK) 
     doSomething(); 

JavaのJFramesの場合コードの打ち上げの

LoginFrame loginFrame = new LoginFrame(CONTROLLER); 
loginFrame.setVisible(true); 

前の2行ログインウィンドウところ、ユーザー入力自分の電子メールとパスワードをすることができます:

私が働いているコードは次のようです。このウィンドウには、OKとCANCELの2つのボタンが表示されます。ウィンドウが閉じた後、私は2つのボタンのどれが押されたのかを知ることに興味があります。

JFramesでJava Swingでこれを行う標準的な方法は何ですか?

+1

おそらく 'JOptionPane.showConfirmDialog(..);'。 –

+0

私の最初の結論は、ダイアログのJFrameオブジェクトを間違って選択したことを確認できますか?代わりにJDialogを使用すべきですか?ありがとう! – ismarlowe

+1

* "代わりにJDialogを使うべきですか?" *絶対に、これはモーダル 'JDialog'か' JOptionPane'(デフォルトではモーダルです)です。 'JOptionPane'を使ったログインの自己完結型の例については、[この回答](https://stackoverflow.com/a/47644458/418556)を参照してください。 [複数のJFramesの使用、良い/悪い習慣?](http://stackoverflow.com/q/9554636/418556)も参照してください(通常、メインアプリケーションのみが 'JFrame'に基づいている必要があります)。 –

答えて

0

ActionListenerをボタンに設定できます。多くの方法があります。

匿名アクション・リスナー(メンテナンス上の問題のために最良の選択肢)

class CheckButtonActionListener implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent actionEvent) { 
     if(e.getSource() == button1) { 
      //if clicks the first button 
     } else if (e.getSource() == button2) { 
      //if clicks the second button 
     } 
    } 

} 

アクション・リスナーを実装して、あなたのJButtonにクラスを設定

button1.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent actionEvent) { 
     if(e.getSource() == button1) { 
      //if clicks the first button 
     } else if (e.getSource() == button2) { 
      //if clicks the second button 
     } 
    } 
}); 

クラス:

CheckButtonActionListener checker = new CheckButtonActionListener(); 
button.addActionListener(checker); 

または:

button1.addActionListener(new CheckButtonActionListener(); 
1

アプリケーションのメインウィンドウは1つのJFrameになります。

子ウィンドウが必要な場合は、JDialogを使用します。 JDialogはJFrameのようなものです。すべてのロジックをコーディングし、すべてのボタンイベントを処理する必要があります。

JOptionPaneは、既定の機能を提供するあらかじめパッケージ化されたJDialogです。あなたがコードで複数の入力フィールドを持つシンプルなのJOptionPaneを作成することができます

何かのように:上記と

JTextField firstName = new JTextField(10); 
//firstName.addAncestorListener(new RequestFocusListener()); 
JTextField lastName = new JTextField(10); 
Object[] msg = {"First Name:", firstName, "Last Name:", lastName}; 

result = JOptionPane.showConfirmDialog(
    frame, 
    msg, 
    "Enter Name", 
    JOptionPane.OK_CANCEL_OPTION, 
    JOptionPane.PLAIN_MESSAGE); 

if (result == JOptionPane.YES_OPTION) 
{ 
    System.out.println(firstName.getText() + " : " + lastName.getText()); 
} 
else 
{ 
    System.out.println("Canceled"); 
} 

一つの問題は、フォーカスは、ボタンではなく、テキストフィールドになるということです。 Request Focus Listener

オプションペインでコンポーネントのレイアウトが気に入らない場合は、コンポーネントでカスタムパネルを作成し、オプションペインにパネルを追加する必要があります。

また、Making DialogsのSwingチュートリアルのセクションをチェックしてください。このセクションとチュートリアルは一般的なもので、C#からの移行としてSwingの基本を提供します。

関連する問題