2012-05-14 1 views
3

Возможно ли создать JDialog в качели, который вернет объект при нажатии кнопки OK?Диалог, возвращающий объект

Например диалоговое окно имеет текстовые поля, которые имеют компоненты, которые составляют адрес (название улицы, страны и т.д.)

При нажатии на кнопке OK щелкает объект адреса возвращаются.

Почему я думал, что это возможно из-за this. Но то, что я хочу, это то, что я упоминал выше.

Любые указатели на то, как это сделать, будут очень полезны.

+3

Для примера [http://stackoverflow.com/a/3002830/230513). – trashgod

+1

Надеюсь, что этот [пример JOptionPane] (http://stackoverflow.com/questions/10306901/how-to-change-highlighting-color-in-java-swing-textarea-and-also-change-the-be/10309277# 10309277), может помочь вам в ваших усилиях :-) –

ответ

6

Как и предыдущие люди предложили: JOptionPane может помочь вам сделать то, что вы хотите. Но если вы решили осуществить это с нуля, вот SSCCE, что делает именно то, что вы хотите (ну, он возвращает строку, но она может быть легко изменены в соответствии с вашими потребностями):

import java.awt.Font; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

class MyDialog 
{ 
    private JFrame parent; 
    private JDialog dialog; 
    private String information; 

    MyDialog (JFrame parent) 
    { 
     this.parent = parent; 
    } 

    private JPanel createEditBox() 
    { 
     JPanel panel = new JPanel(); 

     JLabel dialogtitlelabel = new JLabel ("Enter Info"); 
     panel.add (dialogtitlelabel); 
     dialogtitlelabel.setFont (new Font ("Arial", Font.BOLD, 20)); 


     final JTextArea informationtxt = new JTextArea(); 
     informationtxt.setEditable (true); 
     informationtxt.setLineWrap (true); 
     informationtxt.setWrapStyleWord (true); 

     JScrollPane jsp = new JScrollPane (informationtxt); 
     jsp.setVerticalScrollBarPolicy (ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 
     jsp.setHorizontalScrollBarPolicy (ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     jsp.setPreferredSize (new Dimension (180, 120)); 
     panel.add (jsp); 

     JButton btnok = new JButton ("OK"); 
     panel.add (btnok); 

     JButton btncancel = new JButton ("Cancel"); 
     panel.add (btncancel); 

     btnok.addActionListener (new ActionListener() 
     { 
      @Override public void actionPerformed (ActionEvent a) 
      { 
       if (informationtxt.getText() == null || informationtxt.getText().isEmpty()) 
       { 
        return; 
       } 

       information = informationtxt.getText(); 

       dialog.dispose(); 
      } 
     }); 

     btncancel.addActionListener (new ActionListener() 
     { 
      @Override public void actionPerformed (ActionEvent a) 
      { 
       dialog.dispose(); 
      } 
     }); 

     return panel; 
    } 

    void display() 
    { 
     final int DWIDTH = 200; 
     final int DHEIGHT = 240; 

     dialog = new JDialog (parent, "Information", true); 
     dialog.setSize (DWIDTH, DHEIGHT); 
     dialog.setResizable (false); 
     dialog.setDefaultCloseOperation (JDialog.DISPOSE_ON_CLOSE); 

     dialog.setContentPane (createEditBox()); 

     dialog.setLocationRelativeTo (parent); 
     dialog.setVisible (true); 
    } 

    String getInformation() 
    { 
     return information; 
    } 
} 

public class ReturningDialogTest 
{ 
    public static void main (String[] args) 
    { 
     SwingUtilities.invokeLater (new Runnable() 
     { 
      public void run() 
      { 
       final JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); 

       final JPanel panel = new JPanel(); 

       JButton btn = new JButton ("show dialog"); 

       panel.add (btn); 

       final JLabel lab = new JLabel (""); 

       panel.add (lab); 

       frame.add (panel); 

       btn.addActionListener (new ActionListener() 
       { 
        public void actionPerformed (ActionEvent e) 
        { 
         MyDialog diag = new MyDialog (frame); 
         diag.display(); 

         String info = diag.getInformation(); 

         lab.setText (info); 

         frame.pack(); 
        } 
       }); 

       frame.setLocationRelativeTo (null); 
       frame.pack(); 
       frame.setVisible (true); 
      } 
     }); 
    } 
} 

Что вы вводите, что текстовая область отображается в главном окне, когда вы нажимаете OK, чтобы доказать, что это работает :).

+0

+1, мне тоже понравился этот пример :-) –

5

Поместите компоненты графического интерфейса, чтобы удерживать адрес, в панель. Предоставьте панель в диалоговом окне. После закрытия диалога прочитайте значения компонентов на панели, чтобы построить объект Address.

4

Возможно ли создать JDialog в качели, который будет возвращать объект при нажатии кнопки OK?

это причина, почему JOptionPane exist

При нажатии на кнопку OK щелкают объект адрес возвращается.

см JOptionPane Features