📄 settingspanel.java
字号:
} } private JFileChooser initFileChooser(String dialogTitle) { JFileChooser fileChooser = new JFileChooser(); fileChooser.setApproveButtonText("Select"); fileChooser.setApproveButtonToolTipText("Select file"); fileChooser.setDialogTitle(dialogTitle); return fileChooser; } private void addParameter(JPanel panel, XPathTool xpath, String xpathPrefix, String name) throws TransformerException { boolean optional = xpath.toBoolean("optional"); boolean enabled = optional ? xpath.toBoolean("enabled") : true; String value = xpath.string("default"); String desc = xpath.string("description"); String function = xpath.string("function"); command.addParameter(name, enabled, value, function); if(desc.length() == 0) { return; } JComponent labelPanel = null; JComponent controlComponent = null; if(xpath.count("range") != 1) { labelPanel = initLabelPanel(optional, enabled, null, desc, name, function); controlComponent = initControlComponent(name, value, enabled, null); } else { xpath.setXpathPrefix(xpathPrefix + "range/"); boolean useWholeNumbers = xpath.toBoolean("use-whole-numbers"); String stepString = xpath.string("step").trim(); SpinnerNumberModel model = initSpinnerModel(useWholeNumbers, xpath, value); SpinnerSlider spinnerSlider = initSpinnerSlider(model, name, enabled, desc, useWholeNumbers, stepString); labelPanel = initLabelPanel(optional, enabled, spinnerSlider, desc, name, function); controlComponent = initControlPanel(spinnerSlider); } panel.add(labelPanel); panel.add(controlComponent); } private JComponent initControlComponent(String name, String value, boolean enabled, String function) { if(value.length() > 0) { if(name.equals(Command.BACKGROUND_COLOR_PARAMETER)) { colorEditor = new ColorEditor(command, value, panel, enabled); return colorEditor.getColorCombo(); } else { setFileSizeText(name, value); JTextField textField = new JTextField(value); textField.setName(name); textField.setColumns(15); textField.addKeyListener(textFieldKeyListener); if(function != null) { textFieldMap.put(function, textField); } textFieldMap.put(name, textField); return textField; } } else { return new JLabel(""); } } private JPanel initControlPanel(SpinnerSlider spinnerSlider) { JPanel controlPanel = new JPanel(new BorderLayout(0,0)); JSpinner spinner = spinnerSlider.getSpinner(); Dimension size = new Dimension(53, (int)spinner.getPreferredSize().getHeight()); spinner.setPreferredSize(size); controlPanel.add(spinner, BorderLayout.WEST); controlPanel.add(spinnerSlider.getSlider(), BorderLayout.EAST); return controlPanel; } private SpinnerSlider initSpinnerSlider(SpinnerNumberModel model, String name, boolean enabled, String desc, boolean useWholeNumbers, String stepString) { SpinnerSlider spinnerSlider = new SpinnerSlider(model); spinnerSlider.setName(name); spinnerSlider.setEnabled(enabled); spinnerSlider.setTooltipText(desc); spinnerSlider.addChangeListener(changeListener); spinnerSliderMap.put(name, spinnerSlider); if(!useWholeNumbers) { int fractionalDigits = stepString.substring(stepString.indexOf('.') + 1).length(); spinnerSlider.setFractionDigitsLength(fractionalDigits); } return spinnerSlider; } private JPanel initLabelPanel(boolean optional, boolean enabled, final SpinnerSlider spinnerSlider, String desc, final String name, String function) { String labelName = name.replace('-', ' '); boolean isFileParameter = function.equals(Command.INPUT_FILE_PARAMETER) || function.equals(Command.OUTPUT_FILE_PARAMETER); boolean isBgColorParameter = name.equals(Command.BACKGROUND_COLOR_PARAMETER); final JPanel panel = new JPanel(new BorderLayout()); Component labelComponent = null; JButton button = null; if(!isFileParameter && !isBgColorParameter) { JLabel label = new JLabel(labelName); label.setToolTipText(desc); labelComponent = label; } else if(isBgColorParameter) { button = initColorChooserButton(labelName, enabled); labelComponent = button; } else if(isFileParameter) { labelComponent = initFileChooserButton(name, labelName, function); } panel.add(labelComponent, BorderLayout.WEST); if(optional) { JCheckBox checkBox = initCheckbox(name, desc, enabled, spinnerSlider, button); panel.add(checkBox, BorderLayout.EAST); } else if(isFileParameter) { JLabel label = new JLabel(); fileSizeLabelMap.put(function, label); panel.add(label, BorderLayout.EAST); } return panel; } private JButton initColorChooserButton(String labelName, boolean enabled) { AbstractAction action = new AbstractAction() { public void actionPerformed(ActionEvent e) { colorEditor.chooseColor(); } }; JButton button = GuiUtilities.initButton(labelName, BACKGROUND_COLOR_ACTION, KeyEvent.VK_B, panel, action); button.setToolTipText("Choose color"); button.setEnabled(enabled); return button; } private JButton initFileChooserButton(final String name, final String labelName, String function) { final String prompt = function.equals(Command.INPUT_FILE_PARAMETER) ? "Select " : "Name "; AbstractAction action = new AbstractAction() { JFileChooser fileChooser = initFileChooser(prompt + labelName); public void actionPerformed(ActionEvent e) { int response = fileChooser.showOpenDialog((JComponent)e.getSource()); if(response == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); JTextField textField = getTextField(name); textField.setText(file.getPath()); setFileSizeText(name, file.getPath()); command.setParameterValue(textField.getName(), textField.getText(), false); } } }; JButton button = null; if(function.equals(Command.INPUT_FILE_PARAMETER)) { button = GuiUtilities.initButton(labelName, INPUT_FILE_ACTION, KeyEvent.VK_I, panel, action); } else if(function.equals(Command.OUTPUT_FILE_PARAMETER)) { button = GuiUtilities.initButton(labelName, OUTPUT_FILE_ACTION, KeyEvent.VK_O, panel, action); } button.setToolTipText("Browse files"); return button; } private void setFileSizeText(final String name, String filePath) { JLabel label = (JLabel)fileSizeLabelMap.get(name); if(label != null) { File file = FileUtilities.getFile(filePath); String fileSize = FileUtilities.getFileSize(file); label.setText(fileSize); } } private JCheckBox initCheckbox(final String name, String desc, boolean enabled, final SpinnerSlider spinnerSlider, final JButton button) { final JCheckBox checkBox = new JCheckBox("", false); checkBoxMap.put(name, checkBox); checkBox.setName(name); checkBox.setToolTipText(desc); checkBox.setSelected(enabled); checkBox.setFocusPainted(true); if(spinnerSlider != null) { checkBox.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { spinnerSlider.setEnabled(checkBox.isSelected()); } }); } else if(name.equals(Command.BACKGROUND_COLOR_PARAMETER)) { checkBox.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { JComboBox combo = colorEditor.getColorCombo(); combo.setEnabled(checkBox.isSelected()); button.setEnabled(checkBox.isSelected()); } }); } checkBox.addChangeListener(changeListener); return checkBox; } private JTextField getTextField(String key) { JTextField textField = (JTextField)textFieldMap.get(key); return textField; } private SpinnerNumberModel initSpinnerModel(boolean useWholeNumbers, XPathTool xpath, String defaultValue) throws TransformerException { SpinnerNumberModel model; if(useWholeNumbers) { int value = Integer.parseInt(defaultValue); int min = xpath.toInt("min"); int max = xpath.toInt("max"); int step = xpath.toInt("step"); model = new SpinnerNumberModel(value, min, max, step); } else { double value = Double.parseDouble(defaultValue); double min = xpath.toDouble("min"); double max = xpath.toDouble("max"); double step = xpath.toDouble("step"); model = new SpinnerNumberModel(value, min, max, step); } return model; } public void setColors(Color[] colors) { if(colorEditor != null && colors != null) { colorEditor.setColors(colors); } } public boolean getCenterlineEnabled() { return command.getParameterEnabled(Command.CENTERLINE_PARAMETER); } public String[] getCommandAsArray() { return command.getCommandAsArray(); } public String getCommandName() { return command.getCommandName(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -