求助,不知道该如何问了!!!!!!!!!!!!!!!!

javastudyq 2008-07-30 09:21:36
JDialog 弹出一个模式JDialog ,弹出的JDialog 有一个按钮,按钮的jbutton事件不响应是怎么回事?如何解决?

public class DataFrame extends JFrame {

public static void main(String[] args) {
// TODO Auto-generated method stub
DataFrame dataFrame = new DataFrame();
dataFrame.dataSource();
}

public void dataSource() {
JDialog datasourceDialog = new JDialog();
datasourceDialog.setSize(500, 400);
datasourceDialog.setLocation(datasourceDialog.getToolkit()
.getScreenSize().width
/ 2 - datasourceDialog.getWidth() / 2, datasourceDialog
.getToolkit().getScreenSize().height
/ 2 - datasourceDialog.getHeight() / 2);

JButton addButton = new JButton("添加");

datasourceDialog.add(addButton);
datasourceDialog.setVisible(true);

addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ConfigDataSource configDataSource=new ConfigDataSource();
}
});
}
}




public class ConfigDataSource {
private JButton jButton;

public ConfigDataSource() {
DataFrame dataFrame=new DataFrame();
JDialog datasourceDialog = new JDialog(dataFrame,"111",true);
datasourceDialog.setSize(400, 500);
jButton=new JButton("1111");
datasourceDialog.add(jButton);
datasourceDialog.setVisible(true);

jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//ConfigDataSource configDataSource=new ConfigDataSource();
JOptionPane.showOptionDialog(null, "作者","关于", JOptionPane.DEFAULT_OPTION , JOptionPane.INFORMATION_MESSAGE, null, null, null);
}
});
}
public JButton getJButton() {
return jButton;
}
public void setJButton(JButton button) {
jButton = button;
}
}
...全文
99 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
javastudyq 2008-07-30
  • 打赏
  • 举报
回复
谢谢大家,我按9楼方法做的,能正常显示了。
finalzhzhk 2008-07-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 javastudyq 的回复:]
引用 5 楼 finalzhzhk 的回复:
因为你的dialog是模态的阿

恩,我刚才试了下。的确是这的问题,请问在保持模态的情况下怎么解决?
[/Quote]
解决方法是4 楼 ZangXT的方式,原因见10楼
gudujian607 2008-07-30
  • 打赏
  • 举报
回复
希望能有更详细的解释。
finalzhzhk 2008-07-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ZangXT 的回复:]
把addActionListener提前了一下就正常
[/Quote]
呵呵
因为模态的话会有两个事情做
1.super.dispose();
2.通知所有TreeLock要weak.

调用dialog.show()或dialog.setVisible(true)方法,会获取TreeLock,所以如果在此之间加入到dialog,那么它认为是dialog的,不计入TreeLock中。
xlbc 2008-07-30
  • 打赏
  • 举报
回复
我这边是这样做的

在ui里给按钮添加监听
在view里写actionPerformed(ActionEvent e)
javastudyq 2008-07-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 finalzhzhk 的回复:]
因为你的dialog是模态的阿
[/Quote]
恩,我刚才试了下。的确是这的问题,请问在保持模态的情况下怎么解决?
xlbc 2008-07-30
  • 打赏
  • 举报
回复
以前遇到过,感觉是弹出的对话框把随后的代码给模态住了。。。
yanjing_mail 2008-07-30
  • 打赏
  • 举报
回复
同楼上,感觉挺怪的啊。
放在一起虽然能解决,但是如果弹出的JDialog还要弹出的话。。。。。。
finalzhzhk 2008-07-30
  • 打赏
  • 举报
回复
因为你的dialog是模态的阿
ZangXT 2008-07-30
  • 打赏
  • 举报
回复


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.JOptionPane;

class DataFrame extends JFrame {

public static void main(String[] args) {
// TODO Auto-generated method stub
DataFrame dataFrame = new DataFrame();
dataFrame.dataSource();
}

public void dataSource() {
JDialog datasourceDialog = new JDialog();
datasourceDialog.setSize(500, 400);
datasourceDialog.setLocation(datasourceDialog.getToolkit().getScreenSize().width / 2 - datasourceDialog.getWidth() / 2, datasourceDialog.getToolkit().getScreenSize().height / 2 - datasourceDialog.getHeight() / 2);

JButton addButton = new JButton("添加");

datasourceDialog.add(addButton);
datasourceDialog.setVisible(true);

addButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
ConfigDataSource configDataSource = new ConfigDataSource();
}
});
}
}

class ConfigDataSource {

private JButton jButton;

public ConfigDataSource() {
DataFrame dataFrame = new DataFrame();
JDialog datasourceDialog = new JDialog(dataFrame, "111", true);
datasourceDialog.setSize(400, 500);
jButton = new JButton("1111");
jButton.setBounds(100, 100, 300, 300);
jButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
JOptionPane.showOptionDialog(null, "作者", "关于", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
}
});
datasourceDialog.add(jButton, BorderLayout.NORTH);
datasourceDialog.setVisible(true);
}

public JButton getJButton() {
return jButton;
}

public void setJButton(JButton button) {
jButton = button;
}
}

很奇怪,我把addActionListener提前了一下就正常,放在后面就无法正常响应事件
lujunjsp 2008-07-30
  • 打赏
  • 举报
回复
mark
HW_zxc_0081 2008-07-30
  • 打赏
  • 举报
回复
up

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧