📄 example1.java
字号:
import java.awt.*;import java.awt.event.*;import com.sun.java.swing.*; //Old package nameimport com.sun.java.swing.border.*; //Old package name//import javax.swing.*; //New package name//import javax.swing.border.*; //New package nameclass Example1 extends JPanel { JProgressBar progressBar = new JProgressBar(); static int NUMLOOPS = 100; JLabel statusField = new JLabel("Click Start to begin", JLabel.CENTER); SwingWorker worker; JButton startButton; JButton interruptButton; Border spaceBelow = BorderFactory.createEmptyBorder(0, 0, 5, 0); JButton getStartButton() { return startButton; } /** * When the worker needs to update the GUI we do so by queuing * a Runnable for the event dispatching thread with * SwingUtilities.invokeLater(). In this case we're just * changing the progress bars value. */ void updateStatus(final int i) { Runnable doSetProgressBarValue = new Runnable() { public void run() { progressBar.setValue(i); } }; SwingUtilities.invokeLater(doSetProgressBarValue); } /** * This method represents the application code that we'd like to * run on a separate thread. It simulates slowly computing * a value, in this case just a string 'All Done'. It updates the * progress bar every half second to remind the user that * we're still busy. */ Object doWork() { try { for(int i = 0; i < NUMLOOPS; i++) { updateStatus(i); if (Thread.interrupted()) { throw new InterruptedException(); } Thread.sleep(500); } } catch (InterruptedException e) { updateStatus(0); return "Interrupted"; // SwingWorker.get() returns this } return "All Done"; // or this } /** * This action listener, called by the "Start" button, effectively * forks the thread that does the work. */ ActionListener startListener = new ActionListener() { public void actionPerformed(ActionEvent event) { startButton.setEnabled(false); interruptButton.setEnabled(true); statusField.setText("Working..."); /* Constructing the SwingWorker() causes a new Thread * to be created that will call construct(), and then * finished(). Note that finished() is called even if * the worker is interrupted because we catch the * InterruptedException in doWork(). */ worker = new SwingWorker() { public Object construct() { return doWork(); } public void finished() { startButton.setEnabled(true); interruptButton.setEnabled(false); statusField.setText(get().toString()); } }; } }; /** * This action listener, called by the "Cancel" button, interrupts * the worker thread which is running this.doWork(). Note that * the doWork() method handles InterruptedExceptions cleanly. */ ActionListener interruptListener = new ActionListener() { public void actionPerformed(ActionEvent event) { interruptButton.setEnabled(false); worker.interrupt(); startButton.setEnabled(true); } }; /** * And now for a little assembly. Put together the buttons, progress * bar and status text field. */ Example1(String name) { setBorder(BorderFactory.createTitledBorder( BorderFactory.createLineBorder(Color.black), name)); progressBar.setMaximum(NUMLOOPS); startButton = new JButton("Start"); startButton.addActionListener(startListener); startButton.setEnabled(true); interruptButton = new JButton("Cancel"); interruptButton.addActionListener(interruptListener); interruptButton.setEnabled(false); JComponent buttonBox = new JPanel(); buttonBox.add(startButton); buttonBox.add(interruptButton); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); add(buttonBox); add(progressBar); add(statusField); statusField.setAlignmentX(CENTER_ALIGNMENT); buttonBox.setBorder(spaceBelow); Border pbBorder = progressBar.getBorder(); progressBar.setBorder(BorderFactory.createCompoundBorder( spaceBelow, pbBorder)); } Example1() { this("Example 1"); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -