没有标题栏或关闭按钮的 JOptionPane 内部对话框?
Posted
技术标签:
【中文标题】没有标题栏或关闭按钮的 JOptionPane 内部对话框?【英文标题】:JOptionPane Internal Dialog without title bar or close button? 【发布时间】:2013-12-05 11:32:36 【问题描述】:我正在开发一款游戏作为练习项目。首次加载时,会提示用户登录或创建新播放器。如果用户选择创建一个新玩家,我想要显示新玩家创建表单(主游戏板是JDesktopPane
,理想情况下,它会在JPanel
它的顶层),其他一切都会暂停,直到用户填写并提交此表单。
由于游戏中的其他用户输入任务是使用JOptionPane.showInternalOptionDialog
完成的,我认为这可能会完成这项工作,因为我正在寻找一个类似于模式对话框的JPanel
。但是,我想要没有标题栏或关闭button
的东西,只有确定和取消按钮。有没有办法在没有这些的情况下显示内部对话框?或者以其他方式让JPanel
像模态对话框一样工作?
【问题讨论】:
您可以利用 JXLayer 显示 here、here 和 here 来阻止主 UI,并利用框架玻璃窗格或分层窗格向您展示 @ 987654331@。这将“锁定”基本 UI 并允许您在其上浮动组件 查看How to use Root Panes了解更多详情... 【参考方案1】:您可以使用 JDialog 类
这是一个例子,试着从中得到启发:
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class BDialog extends JDialog
private JButton okBtn = new JButton("OK");
private JButton cancelBtn = new JButton("Cancel");
private JLabel messageLbl = new JLabel("This is a message");
public BDialog()
super(new JFrame(), true);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setUndecorated(true);
setLayout(new FlowLayout(FlowLayout.CENTER));
add(messageLbl);
add(okBtn);
add(cancelBtn);
pack();
setLocationRelativeTo(null);
setVisible(true);
public static void main(String[] args)
new BDialog();
如果这可以帮助您解决问题,请
【讨论】:
这种东西可以在内部对话中使用吗?如果是这样,那可能就是我要找的。span> 当然这就是我为你写它的原因。它需要一个小的修改才能作为一个对话框很好地工作。如果您需要更多帮助,请问我^^ 好的,还有一个问题。如果我将其中之一用作模式对话框,它会阻止后台运行的 SwingWorker 线程吗? 您能否展示一个示例,说明如何在 JDesktopPane 的内部对话框中调用一个?它需要在 JOptionPane 或 JInternalFrame 中吗?【参考方案2】:只需使用JFrame
并使用setUndecorated
方法
JFrame myFrame = new JFrame("My Frame");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
myFrame.setBounds(10, 10, 300, 100);
myFrame.setUndecorated(true);
然后你可以添加一个面板来保存按钮
【讨论】:
改为模态对话框 不要使用设置边界。框架应打包,以便根据添加到对话框中的组件调整大小。您可能还想使用setLocationRelativeTo(...)
方法来定位对话框。
感谢@camickr,我一直以为setBounds
是用来指定框架的大小并放置它的。不是这样(为什么)?如果没有,什么时候应该使用这个功能?
它可以使用,但是有更好的API供您使用,您不必编造幻数。应根据添加到框架的组件的首选尺寸对框架进行包装,以使框架具有适当的尺寸。然后在框架的情况下,您将使用setLocationByPlatform()
让操作系统确定在哪里显示框架。在弹出对话框的情况下,您可能希望它相对于现有框架居中,因此您可以使用setLocationRelativeTo(...)
。以上是关于没有标题栏或关闭按钮的 JOptionPane 内部对话框?的主要内容,如果未能解决你的问题,请参考以下文章
java中,swing设计中,为啥JOptionPane.showmessageDialog()弹出对话框后,单击确定按钮能关闭窗口?
如何让弹出对话框JOptionPane.showConfirmDialog在不用点击"确定"的情况下,可以在给定时间内自动关闭呢?