我有一个Undecorated Modal JDialog,我想在用户点击模态对话框之外时设置为Visible(false).
这可能在Swing吗?
我正在做的是弹出一个文本字段的自定义编辑器,如日期选择器.有没有更简单的方法来做我想要的?
编辑
记住调用setVisible(true)时的模态块,所以你不能只说"不要使用模态对话框"
我已经尝试在对话框上集中监听器,它们在模态时不会触发.
什么代码将有助于使一个JDialog不可移动的?我看了两个选项:
setUndecorated(true); 哪个有效,但删除了所有的装饰.addComponentListener并覆盖该componentMoved()方法,这会导致JDialog随后调用induceEpilepticSeizure() 移动.有任何想法吗?
这是Javaranch中线程的交叉插件(包括一些图像):http://www.coderanch.com/t/567472/GUI/java/Optimal-solution-creating-multiple-dialog
我正在尝试开发一个简单的swing桌面应用程序,我想象很多不同的对话框跳转来获取用户输入.需要在各种对话框窗口中显示标签,文本字段,密码字段,组合框,复选框等.
例如:第一手创建数据库,创建第一个管理员帐户,添加用户,更改用户帐户等.
我理解JOptionPane用于创建简单快速简单的模态对话框.我真的很想知道为什么在这种情况下人们会选择一个而不是另一个.哪一个更适合使用:JOptionPane与JDialog
此外,我可以使用一些指针,如何适当地设计和实现它.
谢谢.
我的程序包含3个主要"部分".主要功能,登录表格和App表格.主要功能应该是这样的:打开登录表单,等待它关闭,然后打开App表单.我不能让等待的部分工作,或者更确切地说,我不知道如何去做这件事.
有人告诉我使用JDialog代替并使用setModal(true),但是使用这种方法,登录表单不会出现在任务栏上,这在我看来很糟糕.
我考虑的另一件事是在关闭后从Login内部打开应用程序,但这感觉就像糟糕的设计,因为这会使登录表单不可重用.
那么,拜托,你会建议什么?
我需要一种方法从数据库中获取一些数据,并阻止用户修改当前的现有数据.
我创建了一个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)
确保它真的会被关闭?
我正在尝试创建一些jQuery对话框,但我想将它们的位置限制在父div中.我正在使用以下代码创建它们(在旁注上,oppacity选项不起作用......):
var d= $('<div title="Title goes here"></div>').dialog({
autoOpen: true,
closeOnEscape: false,
draggable: true,
resizable: false,
width: dx,
height: dy
});
d.draggable('option', 'containment', 'parent');
d.draggable('option', 'opacity', 0.45);
$('#controlContent').append(d.parent());
Run Code Online (Sandbox Code Playgroud) 问题:用户从applet启动长时间操作;显示带有进度条的 JDialog。用户打开/切换到另一个浏览器选项卡 - JDialog 仍然显示(并惹恼用户)。
当用户切换到另一个选项卡时,应该隐藏 JDialog;并在用户切换回来时再次显示。
注意:我看到有类似问题的问题,解决方案是添加 windowActivated/deactivated 侦听器。它对我不起作用,因为窗口中有多个框架,其中一个包含小程序。当用户单击另一个框架时,会投射 windowDeactivate 事件,但用户仍在同一选项卡中。
我知道setVisible(false),dispose()但他们无法真正关闭JDialog.当我让另一个线程停止时,JDialog的线程仍在运行.
我不能使用System.exit(0),因为其他线程需要运行一段时间.
在代码之后,我最终在程序结束时通过System.exit(0)解决问题.
public class CsUpdateCtrl {
/**
* ??service
*/
private CsUpdateService service;
private CsUpdateCtrl() {
this.service = (CsUpdateService) RmiUtil.getBean(RmiUtil.Service.csupdate);
}
private static final Logger log = Logger.getLogger(CsUpdateCtrl.class.getName());
public static void main(String[] args) throws IOException {
LogUtil.read();
log.info("????????");
CsUpdateCtrl ctrl = null;
try {
ctrl = new CsUpdateCtrl();
} catch (Exception e) {
SwingUtil.lookAndFeel();
SwingUtil.message("???????!");
log.info("???????:" + e.getMessage());
return;
}
ctrl.start(ctrl.service.version());
}
/**
* ?????????????????????
*/
private void start(int version) {
PropertyIO io …Run Code Online (Sandbox Code Playgroud) 我可以在我的JDialog中添加圆角边框,如在Java Swing中如何创建圆角标题边框.但它仍然是一种颜色.我想让边框看起来像3D.
这是我尝试的方式.
Graphics2D g2d = (Graphics2D) g;
Color c1 = getBackground();
Color c2 = color1.darker();
int w = getWidth();
int h = getHeight();
GradientPaint gp = new GradientPaint(
0, 0, c1,
0, h, c2);
g2d.setPaint(gp);
g2d.fill3DRect(0,0, w, h,true);
Run Code Online (Sandbox Code Playgroud)
然后,没有3D外观,但边框已经扩大了边框颜色.
我怎样才能做到这一点?
任何示例代码或链接将受到高度赞赏.
"当JDialog(或JFrame)可见时,默认情况下焦点放在第一个可聚焦组件上."
让我们考虑一下这样的代码:
public class MyDialog extends JDialog{
// Dialog's components:
private JLabel dialogLabel1 = new JLabel("Hello");
private JLabel dialogLabel2 = new JLabel("Message");
private JButton dialogBtn = new JButton("Sample Btn text");
public MyDialog(JFrame parent, String title, ModalityType modality){
super(parent, title, modality);
dialogBtn.setName("Button"); //
dialogLabel1.setName("Label1"); // - setting names
dialogLabel2.setName("Label2"); //
setTitle(title);
setModalityType(modality);
setSize(300, 100);
setLocation(200, 200);
// adding comps to contentPane
getContentPane().add(dialogLabel1, BorderLayout.PAGE_START);
getContentPane().add(dialogBtn, BorderLayout.CENTER);
getContentPane().add(dialogLabel2, BorderLayout.PAGE_END);
pack();
}
public void showDialog(){
setVisible(true);
listComps(rootPane.getComponents());
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
} …Run Code Online (Sandbox Code Playgroud) jdialog ×10
java ×9
swing ×8
border ×1
browser ×1
cardlayout ×1
focus ×1
japplet ×1
joptionpane ×1
jquery-ui ×1
modal-dialog ×1
swingworker ×1