- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
很抱歉,这个问题已经被问过很多次了,但我有一个自定义 JDialog。它具有自定义背景,并显示在调用它的框架上,接收消息,然后在为调用它的框架选择一个选项后应返回 YES 或 NO(0 或 1)。
public class JYOptionPane {
@SuppressWarnings("deprecation")
public static void showJY_YES_NO_Dialog(final JFrame frame, String Question) {
darken(frame);
frame.disable();
final JDialog OptionPane = new JDialog();
OptionPane.setAlwaysOnTop(true);
OptionPane.setBounds(
(int) (frame.getX() + (frame.getSize().getWidth() / 2))
- (350 / 2), (int) (frame.getY() + (frame.getSize()
.getHeight() / 2)) - (200 / 2), 350, 200);
OptionPane.setResizable(false);
OptionPane.setUndecorated(true);
ImageIcon icon = new ImageIcon(
LoginFrame.class.getResource("/Images/bgprompt.png"));
Image backImage = icon.getImage();
ImagePanel contentPane = new ImagePanel();
contentPane.setBackgroundImage(backImage);
OptionPane.setContentPane(contentPane);
OptionPane.setBackground(new Color(0, 0, 0, 0));
JLabel lblQuestion = new JLabel(Question);
lblQuestion.setBounds(0, 40, 350, 30);
lblQuestion.setFont(new Font("Calibria", Font.PLAIN, 20));
lblQuestion.setForeground(Color.white);
lblQuestion.setHorizontalAlignment(SwingConstants.CENTER);
lblQuestion.setVerticalAlignment(SwingConstants.CENTER);
lblQuestion.setAlignmentY(JComponent.CENTER_ALIGNMENT);
OptionPane.add(lblQuestion);
JYButton btnYes = new JYButton(
new ImageIcon(LoginFrame.class.getResource("/buttons/default.png")),
new ImageIcon(LoginFrame.class.getResource("/buttons/defaultprs.png")),
new ImageIcon(LoginFrame.class.getResource("/buttons/defaulthv.png")));
btnYes.setText("Yes");
btnYes.setFont(new Font("Arial", Font.BOLD, 17));
btnYes.setForeground(Color.white);
btnYes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
LoginFrame.setOPintNo(0);
Class<? extends JFrame> f = frame.getClass();
try {
f.newInstance().setVisible(true);
frame.dispose();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
OptionPane.dispose();
}
});
btnYes.setBounds(40, 200 / 2 - 31 / 2 + 50, 121, 31);
OptionPane.add(btnYes);
OptionPane.getRootPane().setDefaultButton(btnYes);
JYButton btnNo = new JYButton(new ImageIcon(
LoginFrame.class.getResource("/buttons/default.png")),
new ImageIcon(LoginFrame.class.getResource("/buttons/defaultprs.png")),
new ImageIcon(LoginFrame.class.getResource("/buttons/defaulthv.png")));
btnNo.setText("No");
btnNo.setFont(new Font("Arial", Font.BOLD, 17));
btnNo.setForeground(Color.white);
btnNo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
LoginFrame.setOPintNo(1);
Class<? extends JFrame> f = frame.getClass();
try {
f.newInstance().setVisible(true);
frame.dispose();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
OptionPane.dispose();
}
});
btnNo.setBounds(189, 200 / 2 - 31 / 2 + 50, 121, 31);
OptionPane.add(btnNo);
OptionPane.setVisible(true);
}
}
我试图让它返回一个 int,但它似乎无法将 int 分配给变量。因此,我在 LoginFrame 中创建了一个 int 变量(它永远不会被释放,只是不可见)并将其设置在那里并为其创建一个 Get() 函数。但是,在 JDialog 中进行选择后,如何获取调用 Get() 函数的框架?必须从我作为最终 JFrame 框架传入的框架中调用它。谢谢!
最佳答案
您可能想查看How to Use Modality in Dialogs文档。首先,您不需要传入 JFrame对于您的类(class),您可以简单地摆脱它。看一下这个例子:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Demo {
private void createAndShowGUI() {
JButton button = new JButton("Show dialog");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MyOptionPane optionPane = new MyOptionPane();
int option = optionPane.showYesNoMessage("Close frame", "Do you really want to close the frame?");
if(option == MyOptionPane.YES) {
JButton button = (JButton)e.getSource();
SwingUtilities.getWindowAncestor(button).dispose();
}
}
});
JPanel content = new JPanel();
content.add(new JLabel("Test:"));
content.add(button);
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(content);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public class MyOptionPane {
public static final int YES = 0;
public static final int NO = -1;
private int choice = NO;
public int showYesNoMessage(String title, String message) {
JLabel label = new JLabel(message);
JButton yesButton = new JButton("Yes");
yesButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
choice = YES;
JButton button = (JButton)e.getSource();
SwingUtilities.getWindowAncestor(button).dispose();
}
});
JButton noButton = new JButton("No");
noButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
choice = NO;
JButton button = (JButton)e.getSource();
SwingUtilities.getWindowAncestor(button).dispose();
}
});
JPanel buttons = new JPanel();
buttons.add(yesButton);
buttons.add(noButton);
JPanel content = new JPanel(new BorderLayout(8, 8));
content.add(label, BorderLayout.CENTER);
content.add(buttons, BorderLayout.SOUTH);
JDialog dialog = new JDialog();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setModal(true);
dialog.setTitle(title);
dialog.getContentPane().add(content);
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
return choice;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().createAndShowGUI();
}
});
}
}
<小时/>
关于setBounds()的使用正如@AndrewThompson 总是说的:
Java GUIs might have to work on a number of platforms, on different screen resolutions & using different PLAFs. As such they are not conducive to exact placement of components. To organize the components for a robust GUI, instead use layout managers, or combinations of them, along with layout padding & borders for white space.
所以你应该完全避免使用 setBounds()
和 set(Preferred | Minimum | Maximum)Size()当您使用 Swing 组件时。
关于java - JDialog返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649835/
如何在另一个 JDialog 中添加 JDialog? 最佳答案 JDialog secondDialog = new JDialog(this); // ("this" is the first J
我有一个 JDialog,其中有一个可打开新窗口的按钮。我想要做的是每当其他窗口打开时阻止此 JDialog。当我说阻止时,我的意思是用户无法操纵它,无法移动它或最大化或任何东西。 顺便问一下,对于带
我有一个从 JFrame 上的按钮打开的父 JDialog。父 JDialog 本身有一个从父对话框上的按钮打开的子 JDialog。当我关闭父对话框并使用框架上的按钮再次打开它时,我不希望子对话框也
抱歉这个奇怪的标题,但这是解释。所以我有一个带有学生列表的 StudentRepository 类,这些学生是在 GUI 上选择的(通过 TableModel)。学生对象的属性是: int stude
我有一个未修饰的模态 JDialog,当用户在模态对话框外单击时,我想将其设置为 setVisible(false)。 这在 Swing 中可能吗? 我正在做的是为日期选择器之类的文本字段弹出一个自定
我有一个模式设置对话框,它是一个 JDialog。在这个设置窗口中,我放置了一些组件,包括一个按钮到另一个模态设置对话框,它也是一个 JDialog。我制作了它们 JDialogs,因为这是我所知道的
我只想在单击 JDialog 之外时关闭 JDialog import javax.swing.JDialog; import javax.swing.JLabel; public class Dia
我正在尝试重现我在多个应用程序中看到的功能:我有一个带有多个 JDialog 的 GUI 应用程序。我想轻松地将它们紧密地组织在屏幕上:当我移动一个 JDialog,并且它的一个边界变得“接近”(例如
对 Java 相当陌生,并且遇到了 z 顺序问题。我有一个旧版 Java 应用程序,它有一个主窗口 A,它会弹出一个模式 JDialog B。单击 B 上的按钮后,会弹出一个模式对话框 C。 对于从
我的应用程序中有多个 JDialogs 存储在 map 中。这些JDialogs都有 setModel(false); 当这些对话框失去焦点并且我想将特定的 JDialog 带到前面时,所有 JDia
我有一个扩展 JDialog 的类。当 JDialog 显示时,我单击其启动 Jframe 的显示按钮,但在关闭 JDialog 之前我无法访问 JFrame。当屏幕上存在 JDialog 时,如何访
场景是这样的我的 JFrame 有一个按钮,单击它会打开一个 JDialog,它是一个模型对话框。JDialog 有另一个按钮,我想打开另一个 JFrmae 点击它打开。 结果:另一个 Jframe
我有一个带有主 JFrame 的小型应用程序,它以模态方式打开 JDialog。在这个 JDialog 中,我启动了一个 javax.swing.Timer,它应该在 JDialog 关闭时停止。 p
如何将用户凭据传回到包含的 JFrame,以便 JFrame 知道特定用户? JFrame 有一个 main 方法。 包含的 JFrame 能否以某种方式从 Dialog 中获取用户? 当jbtOk
我基本上创建的是一个 JDialog,它在表单上有一个关键事件。因此,当例如按下空间时,它会做一些事情。在我在同一个对话框上创建一个可编辑的 JTextArea 之前,这种方法工作得很好。当我这样做时
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我正在构建我的第一个 gui,到目前为止一切正常,除了 JDialog 的故障。 .它在第一次使用时相应地接受名称和进程列表。但是当我把它拉回来输入新的输入时,它仍然没有响应。我认为这不是线程问题,因
如何创建一个 Modal JDialog,在任务正在处理时显示“正在加载”,并在超过 3 秒后显示? 最佳答案 为了扩展 Paul 的回答,SwingWorker 可以很好地运行您的后台任务。然后您可
该程序大部分运行正常,但没有打开任何窗口。它应该在桌面右下角显示一个小对话框。但是对于另一个人来说,编译相同的代码没有问题。我们有相同的 Java 运行时 (1.8_u40)。我该如何解决这个问题?
我正在使用 Eclipse 的 Window Builder 插件。 当我执行以下代码时,它正确显示JDialog。我原本希望 JDialog 也能显示在设计选项卡中(在设计时),但它不会。 pack
我是一名优秀的程序员,十分优秀!