2011-12-20 13 views
4

私は、接続したいサーバのIPとポートを尋ねるクライアントGUI用のダイアログを持っています。私は他のすべてを持っていますが、ユーザーがダイアログボックスで「OK」をクリックしたときに何かが実行されるように、どうすればいいでしょうか?ここで私がこれまで持っているものです。Javaダイアログ - OKがクリックされているかどうかを確認しますか?

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JDialog; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 


public class ClientDialog { 
    JTextField ip = new JTextField(20); 
    JTextField port = new JTextField(20); 
    GUI gui = new GUI(); 
    Client client = new Client(); 
    JOptionPane optionPane; 

    public void CreateDialog(){ 

     Object msg[] = {"IP: ", ip, "\nPort: ", port}; 

     optionPane = new JOptionPane(); 
     optionPane.setMessage(msg); 
     optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE); 
     JDialog dialog = optionPane.createDialog(null, "Connect to a server"); 
     dialog.setVisible(true); 

     if(dialog == JOptionPane.OK_OPTION){ 
      System.out.println(ip); 

      String ipMsg = ip.getText(); 
      int portMsg = Integer.parseInt(port.getText()); 

      gui.CreateConsole(client, ipMsg, portMsg); 
     } 

    } 

} //End class 

私はコードが正しくありませんが、私がしたいことは、ユーザがダイアログの「OK」当たったとき、私はいくつかのコードを実行できるということであることを知っています。ありがとう!

+1

JOptionPaneを表示するだけでなく、JOptionPaneオブジェクトからJDialogを作成するのはなぜですか?あなたはモーダルダイアログを望むので、JOptionPaneはそれ自身でうまくいくはずです。 –

+0

Hmmm。良い質問。 –

答えて

10

私はshowConfirmDialog代わり

int result = JOptionPane.showConfirmDialog(myParent, "Narrative", 
     "Title", JOptionPane.INFORMATION_MESSAGE); 

、そこにあなたがJDialog/JOptionPane

if (result == JOptionPane.OK_OPTION, 
       JOptionPane.CANCEL_OPTION, 
       JOptionPane.CLOSED_OPTION, etc.. 
5

から様々な戻り値をテストすることができますを使用することをお勧めしたいのJOptionPane、オブジェクトパラメータで2番目のパラメータのことを理解してください。単純なGUIまたは複雑なGUIを保持するJPanelを含むSwingコンポーネントです。

JPanelを作成し、JLabelsと2つのJTextField、IP用、ポート用などのいくつかのコンポーネントを配置し、このJPanelをJOptionPaneに表示することを検討してください。 OKが押されたかどうかを簡単に確認して、それに応じて行動することができます。

import javax.swing.*; 

public class OptionEg { 
    public static void main(String[] args) { 
     final JTextField ipField = new JTextField(10); 
     final JTextField portField = new JTextField(10); 
     JPanel panel = new JPanel(); 
     panel.add(new JLabel("IP:")); 
     panel.add(ipField); 

     panel.add(Box.createHorizontalStrut(15)); 
     panel.add(new JLabel("Port:")); 
     panel.add(portField); 

     int result = JOptionPane.showConfirmDialog(null, panel, 
      "Enter Information", JOptionPane.OK_CANCEL_OPTION); 

     if (result == JOptionPane.OK_OPTION) { 
     System.out.println("IP: " + ipField.getText()); 
     System.out.println("Port: " + portField.getText()); 
     } 

    } 
} 
6

私はJPanel、ダイアログを表示し、オプションを取得するためにJOptionpane.showConfirmDialog()(あるいはJOptionPane.showOptionDialog()を使用してここでは例として、あなたのコードの変更です作成することをお勧めしたい:。

import java.awt.*; 
import javax.swing.*; 

class ClientDialog { 
    private JTextField ip = new JTextField(20); 
    private JTextField port = new JTextField(20); 
    private JOptionPane optionPane; 
    private JPanel panel; 

    public void CreateDialog(){ 

     panel = new JPanel(new GridLayout(2, 2)); 

     panel.add(new JLabel("IP")); 
     panel.add(ip); 
     panel.add(new JLabel("Port")); 
     panel.add(port); 

     int option = JOptionPane.showConfirmDialog(null, panel, "Client Dialog", JOptionPane.DEFAULT_OPTION); 

     if (option == JOptionPane.OK_OPTION) { 
      System.out.println("OK!"); // do something 
     } 
    } 

} 

public class Test { 

    public static void main(String args[]) 
    { 
     ClientDialog c = new ClientDialog(); 
     c.CreateDialog(); 
    } 

} 

くそーが、かかりました他の種類のフレームと同じように、JPanelのレイアウトを設計するだけです。

0

良い解決策 何か他のものを使用したくない場合は、この 1)DO_NOTHING_ON_CLOSEを設定してOKを押す必要があります。 2)JDialogがまだ表示されているかどうかを確認します。

dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); 
dialog.setModal(false); 
dialog.setVisible(true); 
dialog.setAlwaysOnTop(true); 
while(dialog.isVisible())try{Thread.sleep(50);} 
catch(InterruptedException e){} 

これは、非モーダルダイアログボックスを実装する場合の解決方法です。

関連する問題