gpt4 book ai didi

java - 如何从类方法中重复创建 Jlabel addText?

转载 作者:行者123 更新时间:2023-12-02 00:47:45 26 4
gpt4 key购买 nike

我尝试了 swingwoker ,但它只会更新一次... http://piggyman007.blogspot.com/2010/04/java-swingworker-multithread.html

package smartOfficeJava;

import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Event;
import java.awt.BorderLayout;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.KeyStroke;
import java.awt.Point;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JFrame;
import javax.swing.JDialog;
import javax.swing.JButton;
import javax.swing.JRadioButton;
import javax.swing.SwingWorker;

import java.awt.GridLayout;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToolBar;
import javax.swing.JTextArea;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.util.concurrent.ExecutionException;

public class GUI {
smartOfficeJava.Arduino arduino = new smartOfficeJava.Arduino(); // @jve:decl-index=0:
private JFrame jFrame = null;
private JPanel jContentPane = null;
private JMenuBar jJMenuBar = null;
private JMenu fileMenu = null;
private JMenu helpMenu = null;
private JMenuItem exitMenuItem = null;
private JMenuItem aboutMenuItem = null;
private JMenuItem saveMenuItem = null;
private JDialog aboutDialog = null;
private JPanel aboutContentPane = null;
private JLabel aboutVersionLabel = null;
private JMenu selectPort = null;
private JMenuItem portName = null;
private JLabel jLabel = null;
/**
* This method initializes jFrame
*
* @return javax.swing.JFrame
*/


SwingWorker worker = new SwingWorker<String, Void>() {
//This method automatically gets executed in a background thread

public String doInBackground() {

//fetch the big list from the

String sens = arduino.getSensor();

return sens;

}
//This methods automatically gets executed in the EDT

public void done() {

//Get method retuns the exect, same thing

//that the doInBackground() method returned
String sens = null;
try {
sens = get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jLabel.setText(sens);
//Now do all UI Operations here..
}

};







private JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setJMenuBar(getJJMenuBar());
jFrame.setSize(300, 200);
jFrame.setContentPane(getJContentPane());
jFrame.setTitle("Application");
}
return jFrame;
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel = new JLabel();
jLabel.setBounds(new Rectangle(34, 20, 100, 38));
jLabel.setText("JLabel");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(jLabel, null);
}
return jContentPane;
}

/**
* This method initializes jJMenuBar
*
* @return javax.swing.JMenuBar
*/
private JMenuBar getJJMenuBar() {
if (jJMenuBar == null) {
jJMenuBar = new JMenuBar();
jJMenuBar.add(getFileMenu());
jJMenuBar.add(getHelpMenu());
jJMenuBar.add(getSelectPort());
}
return jJMenuBar;
}

/**
* This method initializes jMenu
*
* @return javax.swing.JMenu
*/
private JMenu getFileMenu() {
if (fileMenu == null) {
fileMenu = new JMenu();
fileMenu.setText("File");
fileMenu.add(getSaveMenuItem());
fileMenu.add(getExitMenuItem());
}
return fileMenu;
}

/**
* This method initializes jMenu
*
* @return javax.swing.JMenu
*/
private JMenu getHelpMenu() {
if (helpMenu == null) {
helpMenu = new JMenu();
helpMenu.setText("Help");
helpMenu.add(getAboutMenuItem());
}
return helpMenu;
}

/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getExitMenuItem() {
if (exitMenuItem == null) {
exitMenuItem = new JMenuItem();
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
return exitMenuItem;
}

/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getAboutMenuItem() {
if (aboutMenuItem == null) {
aboutMenuItem = new JMenuItem();
aboutMenuItem.setText("About");
aboutMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog aboutDialog = getAboutDialog();
aboutDialog.pack();
Point loc = getJFrame().getLocation();
loc.translate(20, 20);
aboutDialog.setLocation(loc);
aboutDialog.setVisible(true);
}
});
}
return aboutMenuItem;
}

/**
* This method initializes aboutDialog
*
* @return javax.swing.JDialog
*/
private JDialog getAboutDialog() {
if (aboutDialog == null) {
aboutDialog = new JDialog(getJFrame(), true);
aboutDialog.setTitle("About");
aboutDialog.setContentPane(getAboutContentPane());
}
return aboutDialog;
}

/**
* This method initializes aboutContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getAboutContentPane() {
if (aboutContentPane == null) {
aboutContentPane = new JPanel();
aboutContentPane.setLayout(new BorderLayout());
aboutContentPane.add(getAboutVersionLabel(), BorderLayout.CENTER);
}
return aboutContentPane;
}

/**
* This method initializes aboutVersionLabel
*
* @return javax.swing.JLabel
*/
private JLabel getAboutVersionLabel() {
if (aboutVersionLabel == null) {
aboutVersionLabel = new JLabel();
aboutVersionLabel.setText("Version 1.0");
aboutVersionLabel.setHorizontalAlignment(SwingConstants.CENTER);
}
return aboutVersionLabel;
}

/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getSaveMenuItem() {
if (saveMenuItem == null) {
saveMenuItem = new JMenuItem();
saveMenuItem.setText("Save");
saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
Event.CTRL_MASK, true));
}
return saveMenuItem;
}

/**
* This method initializes selectPort
*
* @return javax.swing.JMenu
*/
private JMenu getSelectPort() {
String [] ports= null;
ports = arduino.listPorts();

if (selectPort == null) {
selectPort = new JMenu();
selectPort.setText("port");
for (String a : ports){
selectPort.add(getPortName(a));
}
}
return selectPort;
}

/**
* This method initializes portName
*
* @return javax.swing.JMenuItem
*/

private JMenuItem getPortName(String port) {
if (portName == null) {
portName = new JMenuItem();
portName.setText(port);
try {
arduino.connect(port);
worker.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return portName;
}

/**
* Launches this application
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GUI application = new GUI();
application.getJFrame().setVisible(true);
}
});

}

}

最佳答案

done() 仅被调用一次,当 SwingWorker 线程完成时,您应该通过 doInBackground() 调用更新标签。一种可能的方法是实现 PropertyChangeListener 接口(interface),如下所示:

public class MainFrame extends javax.swing.JFrame implements PropertyChangeListener {

private final JLabel label = new JLabel();

MainFrame() {

setPreferredSize(new Dimension(200, 200));
add(label);
pack();

SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
String c = null;
for (String s : new String[] {"a", "b", "c"}) {
Thread.sleep(1000);
firePropertyChange("counter", c, c = s);
}
return true;
}
};

worker.addPropertyChangeListener(MainFrame.this);
worker.execute();
}

public void propertyChange(PropertyChangeEvent evt) {
if ("counter".equals(evt.getPropertyName())) {
label.setText((String) evt.getNewValue());
}
}

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MainFrame().setVisible(true);
}
});
}

}

关于java - 如何从类方法中重复创建 Jlabel addText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4459529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com