2024-06-08 12:20:00 | 我爱编程网
你的 action 事件可以放在一个新线程中运行,不要阻挡 Swing 画图。
Swing 对事件的响应都是放在一个叫事件派发的线程中去做的,如果你的事件响应监听器本身在被事件派发线程调用时你做的事件太花时间了(比如我们来个无限循环啥的)我们就应该把这个 actionPerformed 方法中的事情放在一个新开的线程中去做:
public void actionPerformed(final ActionEvent e) {
new Thread() {
public void run() { // 你的事情都放在这里处理 }
}.start() ; // 开启一个新线程来处理,它将不再阻挡 Swing 事件派发线程去绘图。
}
// 回答完毕,采纳即可
import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Random;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
public class Bar extends JPanel implements PropertyChangeListener
{
private static final long serialVersionUID = 1L;
private JProgressBar progressBar;
private Task task;
public Bar()
{
super(new BorderLayout());
progressBar = new JProgressBar(0, 100);
progressBar.setValue(0);
progressBar.setStringPainted(true);
JPanel panel = new JPanel();
panel.add(progressBar);
add(panel, BorderLayout.PAGE_START);
setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
}
class Task extends SwingWorker
{
@Override
public Void doInBackground()
{
Random random = new Random();
int progress = 0;
setProgress(0);
while(progress < 100)
{
try
{
Thread.sleep(random.nextInt(1000));
}
catch(InterruptedException ignore)
{}
progress += random.nextInt(10);
setProgress(Math.min(progress, 100));
}
return null;
}
@Override
public void done()
{
Toolkit.getDefaultToolkit().beep();
System.exit(0);
}
}
public void propertyChange(PropertyChangeEvent evt)
{
if("progress" == evt.getPropertyName())
{
int progress = (Integer) evt.getNewValue();
progressBar.setValue(progress);
}
}
private void start()
{
task = new Task();
task.addPropertyChangeListener(this);
task.execute();
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("bar");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Bar b = new Bar();
b.setOpaque(true);
b.start();
frame.setContentPane(b);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
我爱编程网(https://www.52biancheng.com)小编还为大家带来我在做一个JAVA软件,希望在点击一个按钮后执行一段程序,在执行过程中出现一个进度条,应该怎么添加的相关内容。
package socket.fox.msgdeal;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;我爱编程网
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class JProgressBar extends Frame implements Runnable {
int x, y; // 进度倏起始位置
int rectWidth, rectHeight, width, height, num; // 进度格倏宽,进度格高,进度倏宽,进度倏高,格子数量
int x0, d, n; // 进度,进度格之间的距离,进度n%
Image bufImg;
Graphics gBuf;
public JProgressBar() {
x = 40;
y = 50;
x0 = x;
rectWidth = 6; // 每个进度格的宽
rectHeight = 10;
d = rectWidth / 3;
num = 50; // 显示五十个进度格
width = (rectWidth + d) * num;
height = rectHeight + 4; // 进度格的高
init();
bufImg = this.createImage(getWidth(), getHeight());
gBuf = bufImg.getGraphics();
paintBack();
repaint();
}
public void init() {
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setSize(this.x * 2 + width, this.y * 2 + height);
this.setVisible(true);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int w = getSize().width;
int h = getSize().height;
int x = (dim.width - w) / 2;
int y = (dim.height - h) / 2;
setLocation(x, y);
}
public static void main(String[] args) {
new Thread(new JProgressBar()).start();
}
public void paintBack() {
gBuf.drawRoundRect(x, y, width, height, 6, 6);
}
public void paintProgressRect() {
Color c = gBuf.getColor();
gBuf.setColor(new Color(46, 211, 49));
x0 = x;
for (int i = 0; i < n; i++) {
gBuf.fillRect(x0, y + 2, rectWidth, rectHeight);
x0 += rectWidth + d;
}
gBuf.setColor(c);
}
public void paint(Graphics g) {
g.drawImage(bufImg, 0, 0, this);
}
/**
* 设置进度倏进度
*
* @param n
* 进度百分比
*/
public void setPercent(int n) {
this.n = n;
}
public void run() {
boolean flag = true;
while (flag) {
try {
repaint();
Thread.sleep(500);
n++;
System.out.println(n);
if (n > num) {
n = num;
flag = false;
}
paintProgressRect();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
能不能点击html按钮时运行php的定义函数?非常见的Editplus之类的,都是专门为PHP开发的,有兴趣都可以试试看,找出自己用得顺手的就可以了,我推荐3个ZendStudio,DzSoftPHPEditor,Editplus,也是我现在用的,希望对大家有帮助。ZendStudio开发商:目前公认的最强大的PHP开发工具,这种集成软件包包括了用于编辑,调试,配置PHP程序所
php。在while循环中调用一个函数。是当调用的函数执行完后再进入下一次循环?你的第一个问题:只有在本次的yihanshu()彻底执行完毕后,才进行下一次while循环。你的第二个问题:可以在yihanshu()里面插入sleep(1000000);例如yihanshu(){sleep(10000);//间隔10000秒之后再继续执行dosomething();
简述Java程序从编写到运行的基本步骤,并说明Java的基本工作原理Java编译原理:Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。一.Java源文件的编译、下载、解释和执行Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译
有个PHP的动态加解密函数代码,求大神帮忙写一个对接这个PHP动态加解密的加解密的源码谢谢、<?php/** * 加密函数 * @param string $string 明文 或 密文 * @param string $operation DECODE表示解密,其它表示加密 * @param string $key 密匙 * @param
java例如在界面上添加一个button,点击button时如何设置断点进入程序单步调式使用Eclipse等IDE编程工具,能方便的进入调试模式。以Eclipse为例:在button的事件函数里面设置断点,用调试模式(即debugas)启动程序即可。新增:把代码贴出来吧。新增:e.getActionCommand().equals("Exit")是用来确认你是否点击的Ex
php点击按钮调用一个函数给你一个最简单的示例<?phpfunctionquery(){........代码......}if($_POST["do"]=="yes"){query();}?><inputtype="button"value="按钮"onclick="javascript:cmdclick()"/><scr
安装了java之后怎样运行程序java,你指的是JDK(javadevelopmentkits)安装完成了,你需要完成以下几个步骤:首先:先将JDK的path,classpath,JAVA_HOME,配置到电脑变量里面,然后:测试JDK是否安装成功,进入电脑控制台,XP是开始菜单->运行选项,Win7为开始菜单->搜索内容里面输入cmd进入控制台,在控制台输入java-v
用js的confirm弹出一个框点击确定后如何执行一个php函数?js是客户端脚本,php在服务器端执行的,只能再用异步访问php页面<script>if(confirm('确定吗?')){$.post('test.php',function(msg){//.......});}</script>需要用到jquery,php函数只能
2025-02-01 20:24:39
2024-01-05 14:11:24
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01
2024-09-10 08:50:00