2013-12-15 103 views
0

在程序中使用多个showInputDialogs。 当这些输入中的一个弹出时,它会冻结背景中的所有其他窗口,直到它接收到输入,是否有办法使其不冻结其他窗口?showInputDialog冻结其他窗口

回答

3

如果通过“冻结”您的意思是用户无法访问其他窗口,那么关键是使新对话框成为非模态对话框。您可以从JOptionPane中提取JDialog,然后选择以非模式方式显示它。 JOptionPane API将告诉你如何。搜索“直接使用”部分:

编辑:安德鲁州也是! 1+


与代码玩....

import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 

import javax.swing.*; 

public class Foo { 

    public static void main(String[] args) { 
     final JTextField textfield = new JTextField(10); 
     textfield.setFocusable(false); 
     final JPanel panel = new JPanel(); 
     panel.add(textfield); 

     panel.add(new JButton(new AbstractAction("Push Me") { 

     private JOptionPane optionPane; 
     private JDialog dialog; 
     private JTextField optionTextField = new JTextField(10); 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      if (dialog == null) { 
       JPanel optionPanel = new JPanel(new BorderLayout()); 
       optionPanel.add(new JLabel("Enter some stuff"), 
        BorderLayout.PAGE_START); 
       optionPanel.add(optionTextField, BorderLayout.CENTER); 
       optionPane = new JOptionPane(optionPanel, 
        JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 
       dialog = optionPane.createDialog(panel, "Get More Info"); 
       dialog.setModal(false); 
       dialog.addComponentListener(new ComponentAdapter() { 
        @Override 
        public void componentHidden(ComponentEvent arg0) { 
        Integer value = (Integer) optionPane.getValue(); 
        if (value == null) { 
         return; 
        } 
        if (value == JOptionPane.OK_OPTION) { 
         textfield.setText(optionTextField.getText()); 
        } 
        } 
       }); 
      } 
      dialog.setVisible(true); 
     } 
     })); 

     JFrame frame = new JFrame("Frame"); 
     frame.add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+1

*“搜索部分标题为”直接使用:“”哦,我没有想到这一点。 +1它*很难重新创建'JOptionPane'的功能.. –

+0

我检查了它,但我没有看到它如何与inputdialogs一起工作?我输入tablename = JOptionPane.showInputDialog(“输入表名*(使用大写字母)”)的样式inputdialogs; – Looptech