IntelliJ IDEA
java
需要重构的代码:package chapter4;import org.jvnet.substance.skin.CremeCoffeeSkin;import org.jvnet.substance.skin.SubstanceAutumnLookAndFeel;import org.jvnet.substance.skin.SubstanceSaharaLookAndFeel;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.concurrent.TimeUnit;/** * Created by MyWorld on 2016/3/24. */public class SwingJProgressBarDemo { public static void main(String[] args) throws UnsupportedLookAndFeelException { UIManager.setLookAndFeel(new SubstanceAutumnLookAndFeel()); SubstanceSaharaLookAndFeel.setSkin(new CremeCoffeeSkin()); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { final JFrame frame = new JFrame("JProgressBarDemo"); frame.setSize(400, 200); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new FlowLayout()); final JProgressBar progressBar = new JProgressBar(); progressBar.setOrientation(JProgressBar.HORIZONTAL); progressBar.setSize(200, 100); progressBar.setMinimum(0); progressBar.setMaximum(100); progressBar.setBorderPainted(true);// progressBar.setUI(new MetalProgressBarUI());// progressBar.setBackground(Color.green);// progressBar.setForeground(Color.BLUE); progressBar.setStringPainted(true); frame.add(progressBar); JButton btn = new JButton("Start ProgressBar"); btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Thread((new Runnable() { @Override public void run() { for (int i = 0; i <= 10; i++) { final int finalI = i; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { progressBar.setValue(finalI * 10); } }); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e1) { e1.printStackTrace(); } } } })).start(); } }); frame.add(btn); frame.setVisible(true); } }); }}
先把JButton按钮的监听事件抽取出来把光标放在new ActionListener()的任一位置,同时按下Ctrl+W,按三次,即可选中需要抽取的内容:new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Thread((new Runnable() { @Override public void run() { for (int i = 0; i <= 10; i++) { final int finalI = i; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { progressBar.setValue(finalI * 10); } }); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e1) { e1.printStackTrace(); } } } })).start(); }}
同时按下Ctrl+Alt+v按提示输入变量名:listener
把光标放在run方法块中任一位置,同时按Ctrl+w键,然后再多次按w键,直到能选中全部run方法内的内容
然后,同时按下Ctrl+Alt+m在Choose Destination Class的选项中,选择“SwingJProgressBarDemo”也就是当前测试类回车
在弹出的对话框中输入方法名:initGUI回车
再使用move method的手法将initGUI转换为SwingJProgressBarDemo的普通方法操作手法见前面的分享看看重构后的代码:package chapter4;import org.jvnet.substance.skin.CremeCoffeeSkin;import org.jvnet.substance.skin.SubstanceAutumnLookAndFeel;import org.jvnet.substance.skin.SubstanceSaharaLookAndFeel;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.concurrent.TimeUnit;/** * Created by MyWorld on 2016/3/24. */public class SwingJProgressBarDemo { public static void main(String[] args) throws UnsupportedLookAndFeelException { UIManager.setLookAndFeel(new SubstanceAutumnLookAndFeel()); SubstanceSaharaLookAndFeel.setSkin(new CremeCoffeeSkin()); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new SwingJProgressBarDemo().initGUI(); } }); } private void initGUI() { final JFrame frame = new JFrame("JProgressBarDemo"); frame.setSize(400, 200); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new FlowLayout()); final JProgressBar progressBar = new JProgressBar(); progressBar.setOrientation(JProgressBar.HORIZONTAL); progressBar.setSize(200, 100); progressBar.setMinimum(0); progressBar.setMaximum(100); progressBar.setBorderPainted(true);// progressBar.setUI(new MetalProgressBarUI());// progressBar.setBackground(Color.green);// progressBar.setForeground(Color.BLUE); progressBar.setStringPainted(true); frame.add(progressBar); JButton btn = new JButton("Start ProgressBar"); ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new Thread((new Runnable() { @Override public void run() { for (int i = 0; i <= 10; i++) { final int finalI = i; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { progressBar.setValue(finalI * 10); } }); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e1) { e1.printStackTrace(); } } } })).start(); } }; btn.addActionListener(listener); frame.add(btn); frame.setVisible(true); }}