2014-03-03 125 views
1

我需要做一个JOptionPane(或类似的东西)与一个JTextField和两个RadioButtons,但我不知道这是可能的。我有一个不同选项的主框架,当我点击“操作”时,我应该调用对话框。我怎样才能做出这个对话?如何做一个自定义JoptionPane

+0

看看这个教程:http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html – mdewitt

+0

使用扩展的JDialog类。使用.setModal(true)将其设置为模态,然后将其显示给用户。你可以设计它的init方法来随心所欲地构建它,并且它会像JOptionPane一样工作,假设你暴露类似.getDialogResult()的东西,它根据点击的内容返回true/false,.getValue()它返回用户输入数据。 –

回答

4

一个textfield和两个单选按钮应该足够小以适合JOptionPane,因此最好继续使用它。

将带有两个单选按钮的JTextField添加到JPanel中,并将该JPanel添加为显示在JOptionPane中的组件。可能希望使用只显示“Ok”的选项窗格,其中一个单选按钮已被选中。

为了安全起见,您可能希望将Janel包装到JScrollPane中,因为我不认为JOptionPanes是可重定义的,并且取决于用户是否通过命令行选项或可访问性设置更改了外观和感觉,那么您可能会切断一些GUI组件。

+0

滚动窗格不应该是必要的 - 列出的组件应该是'pack()'罚款(每次显示时都会为您提供'JOptionPane') –

+0

仅供参考'JOptionPane'可以调整大小:'op =新的JOptionPane(...)','dlg = op.createDialog();''dlg.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);'最后:'dlg.setResizable(true);''dlg.pack(); ' –

1

就我个人而言,我不喜欢使用JOptionPane。沿着使用JDialog的路径走下去。

它可以是简单的:

 JPanel innerPanel = new JPanel(new FlowLayout()); 
     // Add components and listeners here 

     JDialog dialog = new JDialog(); 
     dialog.add(innerPanel); 
     dialog.setModal(true); 
     dialog.pack(); 
     dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     dialog.setVisible(true); 
     dialog.addWindowListener(new WindowAdapter() 
     { 
      @Override 
      public void windowClosing (WindowEvent e) 
      { 
       super.windowClosing(e); 
      } 
     }); 
+0

我在项目中添加了一个JDialog,并对其进行了配置,但我不知道如何从JFrame调用JDialog,并且需要将帧中的变量传递给对话框。我使用Eclipse和Window Builder插件,它为包中的每个组件创建一个类。我想我没有解释得很好。 – temerariomalaga

+0

我不熟悉Window Builder。希望它有一种插入你自己的定制逻辑的方法。在JFrame定制逻辑中,您需要创建对话框。就像'MyJDialog mydiaolog = new MyJDialog();' –

+0

好吧,我试试。我全部使用界面自动完成。我会做对话并复制代码。谢谢你。 – temerariomalaga

相关问题