我有一个Undecorated Modal JDialog,我想在用户点击模态对话框之外时设置为Visible(false).
这可能在Swing吗?
我正在做的是弹出一个文本字段的自定义编辑器,如日期选择器.有没有更简单的方法来做我想要的?
编辑
记住调用setVisible(true)时的模态块,所以你不能只说"不要使用模态对话框"
我已经尝试在对话框上集中监听器,它们在模态时不会触发.
我扩展了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) 什么代码将有助于使一个JDialog不可移动的?我看了两个选项:
setUndecorated(true); 哪个有效,但删除了所有的装饰.addComponentListener并覆盖该componentMoved()方法,这会导致JDialog随后调用induceEpilepticSeizure() 移动.有任何想法吗?
JFrame当新框架弹出时,我试图禁用"主" .我想要它,所以你不能点击或拖动该帧上的任何东西.我尝试制作新的帧JDialog,但是没有禁用另一帧.我还看了关于这个的另一个帖子,它建议使它成为一个JDialog但它仍然不起作用.我真的需要帮助这样做.谢谢.这是我用来制作的代码JDialog,是他们的任何问题吗?
editDialog=new JDialog(IntroScreen.frame);
Run Code Online (Sandbox Code Playgroud)
IntroScreen.frame 代表"主要"框架.
可能重复:
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)
问题是,在调整窗口大小后调用代码.使窗口调整大小然后闪烁回来.
我想这样做当用户试图拖动窗口的高度时它什么都不做.
我的程序包含3个主要"部分".主要功能,登录表格和App表格.主要功能应该是这样的:打开登录表单,等待它关闭,然后打开App表单.我不能让等待的部分工作,或者更确切地说,我不知道如何去做这件事.
有人告诉我使用JDialog代替并使用setModal(true),但是使用这种方法,登录表单不会出现在任务栏上,这在我看来很糟糕.
我考虑的另一件事是在关闭后从Login内部打开应用程序,但这感觉就像糟糕的设计,因为这会使登录表单不可重用.
那么,拜托,你会建议什么?
我在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) 我需要一种方法从数据库中获取一些数据,并阻止用户修改当前的现有数据.
我创建了一个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 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将用于在事件总线上触发新事件.
但我正在努力解决两件事:
是否一个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)
提前感谢任何帮助/洞察力,了解对话框如何打开,"挂起"(虽然我知道它实际上没有挂起/冻结),关闭,然后触发事件.
我目前正在开发一个具有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 ×10
jdialog ×10
swing ×9
modal-dialog ×3
cardlayout ×1
dialog ×1
jframe ×1
jtree ×1
swingworker ×1
treemodel ×1