标签: jdialog

如何在用户点击JDialog之外时关闭模态JDialog?

我有一个Undecorated Modal JDialog,我想在用户点击模态对话框之外时设置为Visible(false).

这可能在Swing吗?

我正在做的是弹出一个文本字段的自定义编辑器,如日期选择器.有没有更简单的方法来做我想要的?

编辑

记住调用setVisible(true)时的模态块,所以你不能只说"不要使用模态对话框"

我已经尝试在对话框上集中监听器,它们在模态时不会触发.

java swing modal-dialog jdialog

5
推荐指数
2
解决办法
1万
查看次数

检索在JDialog中输入的输入

我扩展了JDialog来创建一个自定义对话框,用户必须填写一些字段: 对话框http://www.freeimagehosting.net/uploads/3d4c15ed9a.jpg

我该如何检索输入的数据?

我提出了一个有效的解决方案.它模仿JOptionPane,但由于涉及静态字段,我这样做对我来说看起来很难看......这大致是我的代码:

public class FObjectDialog extends JDialog implements ActionListener {
    private static String name;
    private static String text;
    private JTextField fName;
    private JTextArea fText;
    private JButton bAdd;
    private JButton bCancel;

    private FObjectDialog(Frame parentFrame) {
        super(parentFrame,"Add an object",true);
        // build the whole dialog
        buildNewObjectDialog(); 
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        if(ae.getSource()==bAdd){
            name=fName.getText();
            text=fText.getText();
        }
        else {
            name=null;
            text=null;
        }
        setVisible(false);
        dispose();
    }

    public static String[] showCreateDialog(Frame parentFrame){
        new FObjectDialog(parentFrame);
        String[] res={name,text};
        if((name==null)||(text==null))
            res=null;
        return res;
    }
} …
Run Code Online (Sandbox Code Playgroud)

java user-interface modal-dialog jdialog

5
推荐指数
1
解决办法
7366
查看次数

Java - JDialog不可移动

什么代码将有助于使一个JDialog不可移动的?我看了两个选项:

  1. setUndecorated(true); 哪个有效,但删除了所有的装饰.
  2. addComponentListener并覆盖该componentMoved()方法,这会导致JDialog随后调用induceEpilepticSeizure() 移动.

有任何想法吗?

java swing jdialog

5
推荐指数
1
解决办法
2576
查看次数

打开新的JFrame时禁用JFrame

JFrame当新框架弹出时,我试图禁用"主" .我想要它,所以你不能点击或拖动该帧上的任何东西.我尝试制作新的帧JDialog,但是没有禁用另一帧.我还看了关于这个的另一个帖子,它建议使它成为一个JDialog但它仍然不起作用.我真的需要帮助这样做.谢谢.这是我用来制作的代码JDialog,是他们的任何问题吗?

editDialog=new JDialog(IntroScreen.frame);
Run Code Online (Sandbox Code Playgroud)

IntroScreen.frame 代表"主要"框架.

java swing modal-dialog jframe jdialog

5
推荐指数
1
解决办法
2万
查看次数

JDialog固定高度

可能重复:
JDialog允许用户仅更改对话框的宽度

我有一个JDialog,我希望宽度可以调整,但高度不是.

这是我目前的代码:

addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(ComponentEvent e) {
        setLocation(getLocation().x, getLocation().y + (getHeight() - staticHeight));
        setSize(new Dimension(getWidth(), staticHeight));
        super.componentResized(e);
    }
});
Run Code Online (Sandbox Code Playgroud)

问题是,在调整窗口大小后调用代码.使窗口调整大小然后闪烁回来.

我想这样做当用户试图拖动窗口的高度时它什么都不做.

java swing jdialog

5
推荐指数
1
解决办法
1871
查看次数

如何在继续之前等待JFrame关闭?

我的程序包含3个主要"部分".主要功能,登录表格和App表格.主要功能应该是这样的:打开登录表单,等待它关闭,然后打开App表单.我不能让等待的部分工作,或者更确切地说,我不知道如何去做这件事.

有人告诉我使用JDialog代替并使用setModal(true),但是使用这种方法,登录表单不会出现在任务栏上,这在我看来很糟糕.

我考虑的另一件事是在关闭后从Login内部打开应用程序,但这感觉就像糟糕的设计,因为这会使登录表单不可重用.

那么,拜托,你会建议什么?

java user-interface swing jdialog cardlayout

5
推荐指数
1
解决办法
2042
查看次数

JDialog - 刷新JTree中动态添加的节点

我在JDialog中使用的JTree节点可见性存在问题.当我想向模型添加新节点时,Jtree不会刷新.

奇怪的是节点正在更新,就像我设置setRootVisible(true)一样.

这是代码.提前致谢

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class TestClass {

JTree tree;
DefaultTreeModel dm;
JDialog dialog;

public TestClass(){
    JFrame frame = new JFrame("title");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    JPanel showPane = new JPanel();
    showPane.setLayout(new BorderLayout()); 

    dm = new DefaultTreeModel(new DefaultMutableTreeNode("root"));
    tree = new JTree(dm);
    tree.setRootVisible(false);

    JButton button = new JButton("add node");
    button.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent arg0) {
            DefaultMutableTreeNode root …
Run Code Online (Sandbox Code Playgroud)

java swing jtree jdialog treemodel

5
推荐指数
1
解决办法
6421
查看次数

安全地打开和关闭模态JDialog(使用SwingWorker)

我需要一种方法从数据库中获取一些数据,并阻止用户修改当前的现有数据.

我创建了一个SwingWorker来进行数据库更新,并创建了一个模态JDialog来向用户显示正在发生的事情(使用JProgressBar).模态对话框的defaultCloseOperation设置为DO_NOTHING,所以它只能通过正确的调用关闭 - 我使用setVisible(false).

MySwingWorkerTask myTask = new MySwingWorkerTask();
myTask.execute();
myModalDialog.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

SwingWorker在doInBackground()中执行一些操作,最后调用:

myModalDialog.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

我唯一担心的问题是:在工作人员产生之后,SwingWorker是否可能在行setVisible(false)之前执行setVisible(true)

如果是这样,setVisible(true)可以永远阻止(用户无法关闭模态窗口).

我必须实现以下内容:

while (!myModalDialog.isVisible()) {
    Thread.sleep(150);
}
myModalDialog.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

确保它真的会被关闭?

java swing multithreading jdialog swingworker

5
推荐指数
1
解决办法
4209
查看次数

这个Swing代码是如何工作的?

我在Java/Swing GUI项目中看到以下代码:

MyDialog dlg = new MyDialog(parent, isFizz);
MyDialogResults results = dlg.getResults();

eventBus.fireEvent(new MyDialogEvent(results));
Run Code Online (Sandbox Code Playgroud)

在上面的代码中MyDialog extends JDialog.很明显,正在构建子对话框(并以某种方式向最终用户显示),然后当用户退出对话框时(通过单击OK或其他按钮),resultsbean将用于在事件总线上触发新事件.

但我正在努力解决两件事:

  1. Java被告知如何/在哪里实际绘制/向用户显示对话框?和
  2. 在将事件发送到总线之前,Java被告知如何/在哪里挂起/等待用户退出对话框?

是否一个JDialog子项在JDialog创建时始终显示对话框,并且在退出对话框之前不会从构造函数返回?这是MyDialog上面的hte 构造函数的概要:

public class MyDialog extends JDialog {
    private boolean isFizz;
    private MyDialogResults results;

    // Getters and setters for all properties...

    public MyDialog(Frame parent, boolean isFizz) {
        super(parent, "My Dialog", true);

        setIsFizz(isFizz);

        setVisible(true);
        dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

提前感谢任何帮助/洞察力,了解对话框如何打开,"挂起"(虽然我知道它实际上没有挂起/冻结),关闭,然后触发事件.

java user-interface swing dialog jdialog

5
推荐指数
1
解决办法
117
查看次数

如何正确销毁JDialog?

我目前正在开发一个具有JFrame始终存在的主要工作的应用程序.我现在有一个孩子JDialog出现在按钮上.该框架具有JMenu"退出显示器"的项目.当我JDialog按下显示选项的注销时,我的任务是确保这个孩子消失.注销发生时,主显示器通过以下方式设置为不可见:

mainFrame.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

子JDialog具有默认的关闭操作:

DISPONSE_ON_CLOSE
Run Code Online (Sandbox Code Playgroud)

当用户重新登录时,首先要做的是:

mainFrame.setVisible(true); 
Run Code Online (Sandbox Code Playgroud)

发生这种情况时,子对话框会显示备份.看看JDialogJavadoc,这似乎是预期的行为.然而,我还没有找到一种方法来打破父母/孩子的关系或完全摧毁孩子JDialog.它似乎JDialog仍然存在,直到它是GC,这可能不会及时发生.

这是一个模拟我所看到的行为的示例程序:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.SwingUtilities;

public class WindowTest { 

    public static void createAndShowGUI() {
        JFrame aFrame = new JFrame("LAUNCHER");
        final JFrame aParent = new JFrame("PARENT"); 
        final JDialog aChild = new JDialog(aParent);

        aParent.setSize(200,200);

        final JToggleButton showParentButton = new JToggleButton("HIDE");

        showParentButton.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent e) {
                showParentButton.setText(!showParentButton.isSelected() …
Run Code Online (Sandbox Code Playgroud)

java swing jdialog

5
推荐指数
1
解决办法
2134
查看次数