高手们 java swing中点击按钮后d出JFrame窗口,关闭d出的窗口,程序都关了如何解决啊!

高手们 java swing中点击按钮后d出JFrame窗口,关闭d出的窗口,程序都关了如何解决啊!,第1张

import java.awt.event.WindowAdapter

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.ActionEvent

import 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对象的构造方法中启动一个定时滑棚器,每隔一秒检查该方向上的灯是否为绿,是则打印车辆集合和将集合中的第一辆车移除掉。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12537060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存