小弟正在用swing做个东西,代码如下: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.SwingUtilities;public class test extends JFrame {
private JButton jButton_Update;
private JButton jButton_Finish;
private JDialog myDialog;
private int state; public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
test inst = new test();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public test() {
super();
initGUI();
}
private void initGUI() {
this.setResizable(false);
this.setSize(500, 400);
jButton_Finish = new JButton();
jButton_Finish.setText("完成");
jButton_Finish.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
dispose(); //点击子对话框上的完成按钮,子对话框关闭
}
}
);
jButton_Update = new JButton();
getContentPane().add(jButton_Update);
jButton_Update.setText("更新"); ActionListener updateTask = new ActionListener() {
public void actionPerformed(ActionEvent evt) { myDialog = new JDialog(); //点击主窗口上的更新按钮时,创建子对话框
myDialog.add(jButton_Finish); //完成按钮在子对话框中
jButton_Finish.setEnabled(false); //开始工作时,完成按钮不可用
myDialog.setModalityType(JDialog.DEFAULT_MODALITY_TYPE); //设子窗口为模态对话框
myDialog.setVisible(true); state = doMyJob(); //同时执行我的工作的逻辑,并返回1表示工作结束
if(state == 1){
jButton_Finish.setEnabled(true); //工作结束时,完成按钮可用
}
}
}; jButton_Update.addActionListener(updateTask);
}
public int doMyJob(){
return 1;
}
}现在问题在于: 子对话框设置为模态对话框后,把主Fram给屏蔽了,查了一下,貌似是主Fram的事件线程被子对话框接管了。应该怎么改才能实现现有程序的目的呢(点击更新->主窗口不可用,显示子窗口,继续我的工作->完成后通知子窗口)
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;public class test extends JFrame {
private JButton jButton_Update;
private JButton jButton_Finish;
private JDialog myDialog;
private int state; public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
test inst = new test();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public test() {
super();
initGUI();
}
private void initGUI() {
this.setResizable(false);
this.setSize(500, 400);
jButton_Finish = new JButton();
jButton_Finish.setText("完成");
jButton_Finish.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
dispose(); //点击子对话框上的完成按钮,子对话框关闭
}
}
);
jButton_Update = new JButton();
getContentPane().add(jButton_Update);
jButton_Update.setText("更新"); ActionListener updateTask = new ActionListener() {
public void actionPerformed(ActionEvent evt) { myDialog = new JDialog(); //点击主窗口上的更新按钮时,创建子对话框
myDialog.add(jButton_Finish); //完成按钮在子对话框中
jButton_Finish.setEnabled(false); //开始工作时,完成按钮不可用
myDialog.setModalityType(JDialog.DEFAULT_MODALITY_TYPE); //设子窗口为模态对话框
myDialog.setVisible(true); state = doMyJob(); //同时执行我的工作的逻辑,并返回1表示工作结束
if(state == 1){
jButton_Finish.setEnabled(true); //工作结束时,完成按钮可用
}
}
}; jButton_Update.addActionListener(updateTask);
}
public int doMyJob(){
return 1;
}
}现在问题在于: 子对话框设置为模态对话框后,把主Fram给屏蔽了,查了一下,貌似是主Fram的事件线程被子对话框接管了。应该怎么改才能实现现有程序的目的呢(点击更新->主窗口不可用,显示子窗口,继续我的工作->完成后通知子窗口)
解决方案 »
- 弱弱的问一下,csdn里还有70后依然做代码的吗
- 高手讲解下算法导论中...
- 初学java遇到的编译问题。
- 怎么把一个字符串里面所有的"\r"和"\n"全部删除掉?
- 请问各位高手:java类在内存中驻留的多少时间?什么时候被卸载?
- 请问一个小问题:SQLSERVER 中如何判断一个resultset有没记录,急!!
- 关于参数的问题
- 谁知道Copyright (c) xxxx的格式该怎么写?是写成Copyright (c) 2002还是写成Copyright (c) 1999-2002或者写成Copyright (c) 2002-2010
- 谁有JCreator Pro2.5的注册码?急用!
- 有关jlist问题
- 新手问题。 内部类问题
- 问个简单的问题 关于字符编码的问题
new Thread(new Runnable() {
public void run() {
myDialog.setVisible(true);
}
}, "").start();
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.SwingUtilities;public class Test extends JFrame {
private JButton jButton_Update;
private JButton jButton_Finish;
private JDialog myDialog;
private int state; public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Test inst = new Test();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public Test() {
super();
initGUI();
}
private void initGUI() {
this.setResizable(false);
this.setSize(500, 400);
jButton_Finish = new JButton();
jButton_Finish.setText("完成");
jButton_Finish.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
myDialog.dispose(); //点击子对话框上的完成按钮,子对话框关闭
}
}
);
jButton_Update = new JButton();
getContentPane().add(jButton_Update);
jButton_Update.setText("更新"); ActionListener updateTask = new ActionListener() {
public void actionPerformed(ActionEvent evt) { myDialog = new JDialog(); //点击主窗口上的更新按钮时,创建子对话框
myDialog.add(jButton_Finish); //完成按钮在子对话框中
myDialog.setSize(200,200);
myDialog.setVisible(true);
jButton_Finish.setEnabled(false); //开始工作时,完成按钮不可用
state = doMyJob(); //同时执行我的工作的逻辑,并返回1表示工作结束
if(state == 1){
jButton_Finish.setEnabled(true); //工作结束时,完成按钮可用
}
}
}; jButton_Update.addActionListener(updateTask);
}
public int doMyJob(){
System.out.println("doing~~~~");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 1;
}
}
还有这个你写的有问题
jButton_Finish.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent evt) {
dispose(); //点击子对话框上的完成按钮,子对话框关闭
}
}
);
想一下dispose(); 关闭的是谁 //关闭的是原窗口而不是子窗口 ,要 myDialog.dispose();
doMyJob里有很多逻辑代码,在这里只是省去了而已关闭那个地方是我疏忽了。。我试试用线程调度
线程休眠一下 你就知道了
public int doMyJob(){
System.out.println("doing~~~~");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 1;
}
swing方面本来接触很少,java一般做web的开发。swing做大型的医疗等项目还是比较突出的