.addActionListener(new ActionListener(){
public void actionPerformed (ActionEvent e){
try{
ta.append("Searching Initiated at: "+datetime()+"\n");
gui.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
task.execute();
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
});
//Enable the next stage in the YD process and disable the previously executed functions
clusAn.setEnabled(true);
open.setEnabled(false);
statCl.setEnabled(false);
}catch (Exception IOE){
}
}
});
Run Code Online (Sandbox Code Playgroud)
嗨,我设计的这个应用程序的最后阶段有点痛苦.
基本上,当用户点击按钮时,我会喜欢它,所以光标变成'等待'版本,然后一旦后台进程(task.execute)完成,光标就会恢复正常.
task.execute不在同一个类中,因此我不能直接调用"gui.setCursor",因为它不能将GUI识别为变量.
不知道该怎么做,所以任何建议都会很棒
感谢:D
以下代码执行正常:
public static void main(String [] args) {
Runnable r = new Runnable() {
public void run() {
createGUI();
}
} ;
javax.swing.SwingUtilities.invokeLater(r);
}
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么以下代码无法编译:
import javax.swing.SwingUtilities;
public static void main(String [] args) {
Runnable r = new Runnable() {
public void run() {
createGUI();
}
} ;
invokeLater(r);
}
Run Code Online (Sandbox Code Playgroud)
之间有什么differenc javax.swing.SwingUtilities.invokeLater(r);和import javax.swing.SwingUtilities; invokeLater(r);
背景:
从文档中可以看出,该方法SwingUtilities.updateComponentTreeUI()要求树(什么树?)中的每个组件调用该方法来更新自己的UI 属性updateUI()。
SwingUtilities.updateComponentTreeUI()强烈建议在我们设置LAF之后调用,调用方法:UIManager.setLookAndFeel(LAFClassName),否则LAF主题无法应用于某些组件,最糟糕的是,某些组件无法重新设计(并且可能会抛出一些异常?)。
我对这类事情很陌生,在发现更具启发性的方法SwingUtilities.updateComponentTreeUI() 后UIManager.setLookAndFeel(LAFClassName)我发现了该方法。
在发现之前SwingUtilities.updateComponentTreeUI()我一直遇到一些问题/Exceptions/NullPointerExceptions,事实是我真的不明白它们的原因,直到我没有发现该SwingUtilities.updateComponentTreeUI()方法,这让我明白树中的某些组件不能被更新为新的 LAF。
具体/实际问题:
例如,如果我有一个
子框架
(动态实例化或由 ActionEvent(单击)触发)
主框架
),我在其中设置外观属性,然后调用SwingUtilitiesupdateComponentTreeUI()传递给它的引用mainJFrame:
SwingUtilities.updateComponentTreeUI(mainJFrame),
最后一个是否会更新其所有子组件/subJFrames(从而更新subJFrame我设置 LAF 的位置)?
这不是一个微不足道的问题(还要记住文档所说的内容),因为我调用UIManager.setLookAndFeel(LAFClassName)中的方法subJFrame(这个调用实际上做了什么?),然后我调用SwingUtilities.updateComponentTreeUI()方法传递给它一个对 的引用mainJFrame,那么什么是LAF 主题将应用于mainJFrame?的所有子组件 如果某些子组件/subJFrame尚未初始化?
我只是尝试迭代循环并更新循环JProgressBar内部的值,启动SwingUtilities.invokeLater..但它只在完成后更新.下面是我的简单代码:
import java.awt.Color;
import java.awt.Rectangle;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ProgressBar extends JApplet {
JProgressBar pg = null;
JPanel panel = null;
JButton start = null;
int i;
public void init() {
pg = new JProgressBar(0, 100);
pg.setStringPainted(true);
this.setSize(1200, 600);
this.setLayout(null);
panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.white);
this.setContentPane(panel);
this.setVisible(true);
pg.setBounds(new Rectangle(630, 20, 150, 30));
add(pg);
start = new JButton("start");
start.setBounds(new Rectangle(330, 20, 200, 30));
start.setBackground(Color.lightGray); …Run Code Online (Sandbox Code Playgroud) Java Swing SwingUtilities.invokeLater()允许您将一个线程入队,以便在处理完最后一个AWT事件(用户手势)后运行.
为invokeLater()保证等到拖放动作完成后?
我在JPanel上使用以下代码绘制了BufferedImage.
protected void paintComponent(Graphics g) {
if (image != null) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
double x = (getWidth() - scale * imageWidth) / 2;
double y = (getHeight() - scale * imageHeight) / 2;
AffineTransform at = AffineTransform.getTranslateInstance(x, y);
at.scale(scale, scale);
g2.drawRenderedImage(image, at);
}
}
Run Code Online (Sandbox Code Playgroud)
如何向该图像添加鼠标单击侦听器?另外,我想获得图像的点击坐标,而不是JPanel.
我有这段代码
import javax.swing.SwingUtilities;
public class Client1 {
public static void main( String[] args ) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
//new MyWindow( "Bayog" );
new MyWindowV2( "Bayog" );
}
} );
}
}
Run Code Online (Sandbox Code Playgroud)
如果我不使用SwingUtilities有什么区别?
我是 Java swing 的新手。从主类调用 Jframe 时确实遇到问题。它可能是重复的,但我无法找出为什么我的代码不起作用。所以我在这里发帖。
主班
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SendMail sendMail = new SendMail();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(sendMail,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
});
}
Run Code Online (Sandbox Code Playgroud)
J框架
public class SendMail extends javax.swing.JFrame {
/**
* Creates new form SendMail
*/
public SendMail() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do …Run Code Online (Sandbox Code Playgroud)