📄 geneticalgorithmgui.java
字号:
package edu.zsu.zouang.genetic.gui;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JProgressBar;import javax.swing.JTextField;import javax.swing.SwingUtilities;import javax.swing.border.TitledBorder;import edu.zsu.zouang.genetic.GenerationDetail;import edu.zsu.zouang.genetic.GeneticAlgorithm;public class GeneticAlgorithmGUI extends javax.swing.JFrame { /** * */ private static final long serialVersionUID = 5978534001656130751L; private JTextField generationText; private JTextField populationText; private JTextField mutationText; private JTextField crossText; private JLabel generationLabel; private JLabel averageFitnessLabel; private JLabel maxFitnessLabel; private JLabel minFitnessLabel; private JProgressBar progressBar; private GeneticAlgorithm ga = null; public GeneticAlgorithmGUI() { super(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setResizable(false); setTitle("遗传算法实验"); getContentPane().setLayout(null); setSize(500, 358); JPanel configPanel; configPanel = new JPanel(); configPanel.setLayout(null); configPanel.setBounds(10, 10, 472, 148); getContentPane().add(configPanel); configPanel.setBorder(new TitledBorder(null, "配置信息", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); final JLabel label_5 = new JLabel(); label_5.setBounds(10, 27, 60, 20); configPanel.add(label_5); label_5.setText("交配概率"); final JLabel label_6 = new JLabel(); label_6.setText("变异概率"); label_6.setBounds(10, 53, 60, 20); configPanel.add(label_6); final JLabel label_7 = new JLabel(); label_7.setText("种群规模"); label_7.setBounds(10, 79, 60, 20); configPanel.add(label_7); final JLabel label_8 = new JLabel(); label_8.setText("遗传代数"); label_8.setBounds(10, 105, 60, 20); configPanel.add(label_8); crossText = new JTextField(); crossText.setText("0.9"); crossText.setAutoscrolls(false); crossText.setToolTipText("种群个体之间的交配概率"); crossText.setBounds(100, 25, 186, 20); configPanel.add(crossText); mutationText = new JTextField(); mutationText.setText("0.01"); mutationText.setAutoscrolls(false); mutationText.setToolTipText("种群个体的变异概率"); mutationText.setBounds(100, 54, 186, 20); configPanel.add(mutationText); populationText = new JTextField(); populationText.setText("300"); populationText.setAutoscrolls(false); populationText.setToolTipText("种群个体的数量"); populationText.setBounds(100, 80, 186, 20); configPanel.add(populationText); generationText = new JTextField(); generationText.setText("50"); generationText.setAutoscrolls(false); generationText.setToolTipText("进化的次数"); generationText.setBounds(100, 106, 186, 20); configPanel.add(generationText); final JButton startButton = new JButton(); startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String crossPossibility = crossText.getText(); String mutaionPossibility = mutationText.getText(); String population = populationText.getText(); final String generation = generationText.getText(); try { ga = new GeneticAlgorithm(Integer.valueOf(population), 0.0, Double.valueOf(crossPossibility), Double .valueOf(mutaionPossibility), 24); } catch (NumberFormatException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(getContentPane(), "数字格式不合法!","错误", JOptionPane.ERROR_MESSAGE); } GeneticAlgorithmThread thread = new GeneticAlgorithmThread(Integer.valueOf(generation)); new Thread(thread).start(); } }); startButton.setText("开始"); startButton.setBounds(331, 26, 99, 23); configPanel.add(startButton); final JButton closeButton = new JButton(); closeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(getContentPane(), GeneticAlgorithmReportGenerator.createGeneticAlgorithmReportPanel(), "遗传算法报告", JOptionPane.PLAIN_MESSAGE); } }); closeButton.setText("生成报告"); closeButton.setBounds(331, 64, 99, 23); configPanel.add(closeButton); final JButton aboutButton = new JButton(); aboutButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane .showMessageDialog( getContentPane(), "版本:\t v1.0\n作者:\t 邹昂\n专业:\t 软件生产技术\n学号:\t 04382036", "关于", JOptionPane.INFORMATION_MESSAGE); } }); aboutButton.setText("关于"); aboutButton.setBounds(331, 104, 99, 23); configPanel.add(aboutButton); final JPanel detailPanel = new JPanel(); detailPanel.setLayout(null); detailPanel.setBorder(new TitledBorder(null, "详细信息", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null)); detailPanel.setBounds(10, 193, 472, 123); getContentPane().add(detailPanel); final JLabel label_2 = new JLabel(); label_2.setText("当前代数"); label_2.setBounds(10, 25, 84, 15); detailPanel.add(label_2); final JLabel label = new JLabel(); label.setText("平均适应值"); label.setBounds(10, 46, 84, 15); detailPanel.add(label); final JLabel label_1 = new JLabel(); label_1.setText("最大适应值"); label_1.setBounds(10, 67, 84, 15); detailPanel.add(label_1); final JLabel label_3 = new JLabel(); label_3.setText("最小适应值"); label_3.setBounds(10, 88, 84, 15); detailPanel.add(label_3); generationLabel = new JLabel(); generationLabel.setText("0"); generationLabel.setBounds(119, 25, 164, 15); detailPanel.add(generationLabel); averageFitnessLabel = new JLabel(); averageFitnessLabel.setText("0.0"); averageFitnessLabel.setBounds(119, 46, 164, 15); detailPanel.add(averageFitnessLabel); maxFitnessLabel = new JLabel(); maxFitnessLabel.setText("0.0"); maxFitnessLabel.setBounds(119, 67, 164, 15); detailPanel.add(maxFitnessLabel); minFitnessLabel = new JLabel(); minFitnessLabel.setText("0.0"); minFitnessLabel.setBounds(119, 88, 164, 15); detailPanel.add(minFitnessLabel); progressBar = new JProgressBar(); progressBar.setStringPainted(true); progressBar.setOpaque(true); progressBar.setBounds(10, 164, 472, 18); getContentPane().add(progressBar); getContentPane().setPreferredSize(new Dimension(500, 358)); } public class GeneticAlgorithmThread extends Thread implements Runnable { private int times; public GeneticAlgorithmThread(int times) { this.times = times; } @Override public void run() { // TODO Auto-generated method stub super.run(); for (int i = 0; i < times; i++) { ga.crossoverPopulation(); SwingUtilities.invokeLater(new Runnable() { public void run() { // TODO Auto-generated method stub GenerationDetail detail = ga.getDetail(); generationLabel.setText(String.valueOf(detail.getGeneration())); averageFitnessLabel.setText(String.valueOf(detail.getAverageFitness())); maxFitnessLabel.setText(String.valueOf(detail .getMaxFitness())); minFitnessLabel.setText(String.valueOf(detail.getMinFitness())); progressBar.setValue(100 * (detail.getGeneration())/ Integer.valueOf(times)); } }); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -