⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 offsetchooser.java

📁 模拟退火是一种启发式算法
💻 JAVA
字号:
package org.theblueplanet.annealing.ui;import java.awt.BorderLayout;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.GridLayout;import javax.swing.BorderFactory;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.EtchedBorder;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import org.apache.log4j.Logger;import org.theblueplanet.annealing.AnnealingScheme;import org.theblueplanet.util.NumberFormatUtil;import org.theblueplanet.util.SwingUtil;public class OffsetChooser extends JPanel {    private static final int MAXCOLS          = 5;    private static final int TEXTWIDTH        = 8;    private static final double defaultOffset = 0.0;    private JPanel infoPanel;    private JTextField[] field;    private AnnealingScheme scheme;    private static Logger logger= Logger.getLogger("org.theblueplanet.annealing");    public OffsetChooser(AnnealingScheme scheme) {        super();        this.scheme = scheme;        init();        display(scheme);    }    private void init() {        logger.debug("Instantiating " + this.getClass().getName());        this.setLayout(new BorderLayout());        infoPanel = new JPanel(new GridLayout(2, 1));        infoPanel.add(new JLabel("Offset selector"));        infoPanel.add(new JLabel("" + scheme.getNdim() + " vertices"));    }    protected void refresh(AnnealingScheme scheme) {        this.removeAll();        display(scheme);    }    private void display(AnnealingScheme scheme) {        this.add(infoPanel, BorderLayout.NORTH);        this.add(createOffsetPanel(scheme), BorderLayout.CENTER);    }    private JPanel createOffsetPanel(AnnealingScheme scheme) {        int np                 = scheme.getNdim();        JPanel offsetPanel     = new JPanel(new GridBagLayout());        GridBagConstraints gbc = new GridBagConstraints();        gbc.fill               = GridBagConstraints.NONE;        gbc.weightx            = 1.0;        gbc.weighty            = 0.0;        SwingUtil.addUsingGBL(offsetPanel, new JLabel("Offset"), gbc, 0, 0, 10, 1);        field       = new JTextField[np];        for(int ii=0 ; ii<np ; ii++) {      //Add labels & textfields            final int level = ii;            int index       = ii + 1;            JLabel label = new JLabel("P" + index);            SwingUtil.addUsingGBL(offsetPanel, label, gbc, 0, index, 2, 1);            String offsetString = convertOffsetToString(scheme.getOffset()[index]);            field[ii] = new JTextField(offsetString, TEXTWIDTH);            field[ii].getDocument().addDocumentListener(                new DocumentListener() {                    public void insertUpdate(DocumentEvent e) {                        updateOffset(field[level].getText(), level + 1); //Fortran                    }                    public void removeUpdate(DocumentEvent e) {                        updateOffset(field[level].getText(), level + 1); //Fortran                    }                    public void changedUpdate(DocumentEvent e) {                        updateOffset(field[level].getText(), level + 1); //Fortran                    }                }            );            SwingUtil.addUsingGBL(offsetPanel, field[ii], gbc, 2, index, TEXTWIDTH, 1);        }        return offsetPanel;    }    protected void updateOffset(String text, int ii) {        try {            Double value = new Double(text);            scheme.setOffset(value.doubleValue(), ii);        } catch (NumberFormatException e) {            // Don't update unless a double is passed ie: do nothing        }    }    private String convertOffsetToString(double offset) {        if(Math.abs(offset) > .001 || offset == 0.0) {            return NumberFormatUtil.format(offset, "####0.0##");        }        return NumberFormatUtil.format(offset, "0.0###E0");    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -