import java.awt.event.WindowEvent
import javax.swing.JFrame
import javax.swing.JOptionPane
public class TestFrame {
public static void main(String[] args) {
JFrame frame=new JFrame()
frame.setSize(400, 300)
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)
frame.setVisible(true)
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
int value=JOptionPane.showConfirmDialog(null, "确定拍郑要关闭空贺悉斗乎吗?")
if (value==JOptionPane.OK_OPTION) {
System.exit(0)
}
}
})
}
}
很简单,处理事件的时候,新开一个线程处理,就不会导致主界面卖闹袜弯衡失去响应。
看我的例子。
import java.awt.event.ActionEventimport java.awt.event.ActionListener
import javax.swing.JButton
import javax.swing.JFrame
public class NewThreadActionDemo extends JFrame {
private JButton button
public static void main(String[] args) {
new NewThreadActionDemo()
}
public NewThreadActionDemo() {
this.setSize(800, 600)
this.setLayout(null)
this.setDefaultCloseOperation(EXIT_ON_CLOSE)
button = new JButton("耗时中激很长的事件")
button.setBounds(300, 200, 200, 80)
button.addActionListener(new ButtonAction())
add(button)
this.setVisible(true)
}
public class ButtonAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
new Thread() {
{
this.setDaemon(true)
}
public void run() {
button.setEnabled(false)
for (int i = 9i >0i--) {
button.setText("运行中(" + i + " / 10)")
sleep()
}
button.setText("耗时很长的事件")
button.setEnabled(true)
}
private void sleep() {
try {
sleep(1000)
} catch (InterruptedException e) {
e.printStackTrace()
}
}
}.start()
}
}
}
这样:
import java.awt.*
import java.awt.event.*
import javax.swing.*
import java.awt.Graphics
public class MainClass extends JFrame {
public JComboBox box
int flag = 0
jpNewPanel jpNewPanel
public static void main(String[] args) {
MainClass frame = new MainClass()
frame.setBounds(650,300,550,550)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setTitle("信号灯")
frame.setVisible(true)
}
public MainClass() {
box = new JComboBox()
box.addItem("请选择")
box.addItem("红灯")
box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
flag = box.getSelectedIndex()
jpNewPanel.repaint()
}
})
box.addItem("黄灯")
box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
flag = box.getSelectedIndex()
jpNewPanel.repaint()
}
})
box.addItem("绿灯")
box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
flag = box.getSelectedIndex()
jpNewPanel.repaint()
}
})
add(box, BorderLayout.NORTH)
jpNewPanel = new jpNewPanel()
add(jpNewPanel, BorderLayout.CENTER)
}
class jpNewPanel extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g)
g.drawOval(150, 0, 120, 120)
if (flag == 1) {
g.setColor(Color.RED)
g.fillOval(150, 0, 120, 120)
} else if (flag == 2) {
g.setColor(Color.YELLOW)
g.fillOval(150, 0, 120, 120)
} else if (flag == 3) {
g.setColor(Color.GREEN)
g.fillOval(150, 0, 120, 120)
}
}
}
}
扩展资料枣迹:注意事项
每个Road对象都有一个name成员变量来代表方向,有一个vehicles成员变量来代表方向上的车辆集合。
在Road对象的构造方法中启动一个线程凳让并每隔一个随机的时间向vehicles集合中增加一辆车(用一个“路线名_id”形式的字符串进行表示)。
在Road对象的构造方法中启动一个定时滑棚器,每隔一秒检查该方向上的灯是否为绿,是则打印车辆集合和将集合中的第一辆车移除掉。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)