【问题标题】:Dispose JDialog by code, don't let the user close it通过代码处理 JDialog,不要让用户关闭它
【发布时间】:2012-04-19 19:18:04
【问题描述】:

我有一个简短的代码,我想处理一个对话框,但不希望用户能够关闭它,它不起作用,请帮助我。

    import javax.swing.*;
    public class Processing extends JOptionPane{

    JDialog jd;
    public Processing(){
        super(null, JOptionPane.DEFAULT_OPTION, 
                  JOptionPane.INFORMATION_MESSAGE, null, new Object[]{});
        Icon processPic = new ImageIcon("C:\\Users\\Judit\\Desktop\\Mesekocka3D"
                + "\\externals\\pics\\szamitas.gif");

        setMessage(processPic);
        jd = createDialog("Számítás");

        jd.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        jd.setVisible(true);
        jd.dispose();
    }   
}

这就是我的代码现在的样子,我使用 Jdialog 而不是 Joptionpane,我应该写更多的字符让网站接受我的编辑吗?

import javax.swing.*;



public class Mifasz
{
 private static class Processing extends JDialog{

public Processing(){
    Icon processPic = new ImageIcon("C:\\Users\\Judit\\Desktop\\Mesekocka3D"
            + "\\externals\\pics\\szamitas.gif");
    JLabel label = new JLabel(processPic);
    add(label);
    setTitle("Számítás");
    setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);        
    setSize(400, 70);
    setLocation(330, 300);
    setModal(true);
    setVisible(true);
    dispose();
}       
}

  public static void main(String[] args)
  {
    Processing pc = new Processing();
  }

}

【问题讨论】:

  • 你为什么要把JDialogJOptionPane混在一起(这是JComponents的同一个家族),你真正想要做什么,(忽略don't want the user to be able to close it),其中之一是没用,使用 JDialog 或 JOptionPane :-)
  • 我想给用户显示一个gif短时间,它就像一个加载屏幕,我不希望他对应用程序做任何事情,所以我正在使用joptionpane,但我也想禁用 X 按钮,所以我使用的是 jdialog,因为我没有找到禁用选项窗格的 X 按钮的选项。

标签: java swing dispose jdialog


【解决方案1】:

我想为用户显示一个 gif 短时间,它就像一个加载屏幕,我不希望他对应用程序做任何事情,所以我正在使用 joptionpane,但我也想禁用 X 按钮,所以我使用 jdialog,因为我没有找到禁用选项窗格的 X 按钮的选项。

1) 你可以使用未修饰的JDialog#setUndecorated(true);

2) 将gif 作为Icon 放入JLabel

3) 使用Swing Timer 进行计时,Swing Timer 的输出可以是Swing Action,而在actionPerformed 里面放JDialog#setVisible(fasle);

编辑

我想阻止它,它需要在用户点击 JCombobox 项时使用多次

1) 只创建一次 JDialog,你只会重复使用它

2) 在 actionPerformed 中运行 Swing Timer#repeat(false) 并在 JDialog#setVisible(fasle); 中放置 JDialog#setVisible(fasle);

3) 事件从选定的Item (JComboBox) 更改Icon 中的JLabel myLabel#setIcon(myAnotherGIF)

4) 内invokeLater 包裹JDialog#setVisible(true);

5) 不需要任何其他步骤

仅在特殊情况下

6) 你必须打电话

myIcon.getImage().flush();
myLabel.setIcon(myIcon);

如果您在JLabel 中重绘Icon's 时遇到问题

【讨论】:

  • @Ferenc Dajka 在这里看到我的答案,我的问题是你想用图像显示这个 JDialod 多少​​次,如果在应用程序生命周期中只有一次,那么你不需要以某种方式回复...
  • JDialog 不会像 joptionpane 那样屏蔽屏幕,我想屏蔽它,它需要在用户点击 JCombobox 项时使用多次
  • @Ferenc Dajka JDialog#setModal(true); 或者有 ModalityTypes,但可能不重要...
  • @Ferenc Dajka 请参阅我的帖子中关于您上次评论休息的编辑
  • @Ferenc Dajka 我认为这是为 Image、ImageIcon、Icon 指定的,
【解决方案2】:

你需要打电话

jd.setVisible(false);

然后

jd.dispose();

【讨论】:

    【解决方案3】:

    您想要做的是启动画面,请参阅this

    【讨论】:

      【解决方案4】:

      好的,所以我找到了一个非常简单的解决方案: 我只是在处理时禁用大型机。 How to make a JFrame Modal in Swing java

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-24
        • 1970-01-01
        相关资源
        最近更新 更多