在java swing中,想要在点击了第一个窗体的按钮后,显示出第二个窗体,但是第二个窗体是一个倒计时的动态
当我把第二个窗体作为一个单独的程序时,它能够正常显示所有组件及时间;但是,当我想通过单击第一个窗体中的确定按钮来显示它时,它是透明的(我已经把它设为可见的了),只有当倒计...
当我把第二个窗体作为一个单独的程序时,它能够正常显示所有组件及时间;
但是,当我想通过单击第一个窗体中的确定按钮来显示它时,它是透明的(我已经把它设为可见的了),只有当倒计时的时间停止了之后,它才完全显示出来。
图片上显示的是我单击了ok按钮后的情况:两个窗体的重叠,其中,前面一个窗体是透明的(在已经设置为可见的情况下)。
不知道是什么问题? 展开
但是,当我想通过单击第一个窗体中的确定按钮来显示它时,它是透明的(我已经把它设为可见的了),只有当倒计时的时间停止了之后,它才完全显示出来。
图片上显示的是我单击了ok按钮后的情况:两个窗体的重叠,其中,前面一个窗体是透明的(在已经设置为可见的情况下)。
不知道是什么问题? 展开
1个回答
展开全部
第二个窗体中,你肯定没有用线程。
如果倒计时,不是一个线程,那么它在执行时,就和那个窗口是一个线程。你把这个计时放在了窗体系的显示之前了,这样,当然会是等倒计时结束才会显示窗体。
如果你放在显示之后,那么窗体显示出来以后,也不会动态的显示倒计时时间。
下边是倒计时的那个窗体。
------------------------------------------------------------------------------------------------
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Graphics;
public class RunTime extends JFrame {
TimePanel panel = null;
public RunTime() {
panel = new TimePanel(100);
getContentPane().add(panel, BorderLayout.CENTER);
new timer().start();
setSize(100, 120);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new RunTime();
}
class timer extends Thread {
public void run() {
try {
while (true) {
if (panel.time == 0) {
return;
}
repaint();
sleep(500);
}
} catch (Exception e) {
}
}
}
}
class TimePanel extends JPanel {
int time = 0;
public TimePanel(int time) {
this.time = time;
}
public void paint(Graphics g) {
super.paint(g);
g.drawString(time-- + "", 20, 50);
}
}
如果倒计时,不是一个线程,那么它在执行时,就和那个窗口是一个线程。你把这个计时放在了窗体系的显示之前了,这样,当然会是等倒计时结束才会显示窗体。
如果你放在显示之后,那么窗体显示出来以后,也不会动态的显示倒计时时间。
下边是倒计时的那个窗体。
------------------------------------------------------------------------------------------------
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Graphics;
public class RunTime extends JFrame {
TimePanel panel = null;
public RunTime() {
panel = new TimePanel(100);
getContentPane().add(panel, BorderLayout.CENTER);
new timer().start();
setSize(100, 120);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new RunTime();
}
class timer extends Thread {
public void run() {
try {
while (true) {
if (panel.time == 0) {
return;
}
repaint();
sleep(500);
}
} catch (Exception e) {
}
}
}
}
class TimePanel extends JPanel {
int time = 0;
public TimePanel(int time) {
this.time = time;
}
public void paint(Graphics g) {
super.paint(g);
g.drawString(time-- + "", 20, 50);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询