📄 offsetchooser.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 + -