Java 全屏模式对话框
如何创建一个可用作内部对话框的自定义模式 JDialog?用于全屏独占模式。
我有一个 JScrollPane (带有巨大的滚动条),里面充满了巨大的按钮,如下所示:
+----------------------+------+
| FOO | /\ |
|______________________+------+
| |______|
| BAR | |
|______________________| == |
| |______|
| BIZ | |
+______________________+------+
| | \/ |
|----------------------+------+
我需要用户使用巨大的滚动条滚动并点击特定按钮以选择它并关闭对话框。该对话框处于全屏独占模式。需要禁用关闭按钮,并且不需要有“确定”或“取消”按钮,无论单击哪个按钮都需要更新值,然后在对话框上调用frame.dispose()。
现在我正在使用内部框架,但该框架不会在其他所有内容前面弹出,因为我没有使用 JDesktop。我也尝试过 JDialog 但它最小化了应用程序。
JOptionPane.showInternalDialog() 可以工作,但是如何以相同的方式构造我自己的内部对话框以便可以显示它们?如果我制作一个内部框架,然后将其添加到一个组件中,它只会位于该组件内,而不是位于所有组件之上。
编辑:查看了这些类并尝试了弹出窗口工厂,但弹出窗口似乎无法在全屏下可靠地工作。
编辑:尝试 JOptionPane.createInternalFrame() 这里是我正在使用的演示,但它似乎还没有工作。
public class FullscreenDialog {
public static final void main(final String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//uses os window manager
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(800,600));
final JLabel label = new JLabel("Something to say.");
panel.add(label);
final JFrame fullscreenFrame = new JFrame();
fullscreenFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
fullscreenFrame.setUndecorated(true);//To remove the bars around the frame.
fullscreenFrame.setResizable(false);//resizability causes unsafe operations.
fullscreenFrame.setContentPane(panel);
fullscreenFrame.validate();
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(fullscreenFrame);//actually applies the fullscreen.
final JOptionPane optionPane = new JOptionPane();
optionPane.add(new JLabel("Some alert"));
final JButton button = new JButton();
button.setText("Press me.");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
label.setText("worked");
optionPane.setValue(button);
}
});
JInternalFrame frame = optionPane.createInternalFrame(panel, "Internal Dialog");
frame.setVisible(true);
}
}
How does one create a custom modal JDialog that can be used as an internal dialog? For use in FullscreenExclusiveMode.
I have a JScrollPane (with a huge scrollbar) full of huge buttons like so:
+----------------------+------+
| FOO | /\ |
|______________________+------+
| |______|
| BAR | |
|______________________| == |
| |______|
| BIZ | |
+______________________+------+
| | \/ |
|----------------------+------+
I need the user to use the giant scrollbar to scroll through and tap a particular button to select it and close the dialog. The dialog is in fullscreen exclusive mode. The close button needs to be disabled and it needs to not have okay or cancel buttons, whichever button they click needs to update a value and then call frame.dispose() on the dialog.
Right now I'm using an internal frame but the frame isn't popping up in front of everything else because I'm not using a JDesktop. I've also tried JDialog but it minimizes the app.
JOptionPane.showInternalDialog() works but how do I construct my own internal dialogs in the same fashion so that they can be shown? If I make an internal frame and then add it to a component it just sits within that component and not on top of everything.
EDIT: Looked through those classes and tried the popup factory but the popups don't seem to work reliably in fullscreen.
EDIT: Trying JOptionPane.createInternalFrame() here is the demo I'm working with but it doesn't seem to be working yet.
public class FullscreenDialog {
public static final void main(final String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//uses os window manager
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(800,600));
final JLabel label = new JLabel("Something to say.");
panel.add(label);
final JFrame fullscreenFrame = new JFrame();
fullscreenFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
fullscreenFrame.setUndecorated(true);//To remove the bars around the frame.
fullscreenFrame.setResizable(false);//resizability causes unsafe operations.
fullscreenFrame.setContentPane(panel);
fullscreenFrame.validate();
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(fullscreenFrame);//actually applies the fullscreen.
final JOptionPane optionPane = new JOptionPane();
optionPane.add(new JLabel("Some alert"));
final JButton button = new JButton();
button.setText("Press me.");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
label.setText("worked");
optionPane.setValue(button);
}
});
JInternalFrame frame = optionPane.createInternalFrame(panel, "Internal Dialog");
frame.setVisible(true);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
JOptionPane
构造函数的message
参数可以是Component
以及字符串,例如,它可以是您的JScrollPane
>。要从选项窗格中删除标准按钮,请使用空数组调用
setOptions(Object[])
。The
message
argument to theJOptionPane
constructor can be aComponent
as well as a string, e.g. it could be yourJScrollPane
.To remove the standard buttons from the option pane, call
setOptions(Object[])
with an empty array.JOptionPane.showXXXDialog(...) 允许在创建自定义内部对话框时进行大量自定义。
JOptionPane.showXXXDialog(...) allows for a lot of customizations in creating a custom internal dialog.
试试这个..
try this..