Browse Source

Pull request #5376: REPORT-56926 【FRM布局推荐】组件复用-手动间距目前不支持输入小数(允许输入小数,但自动取整处理)

Merge in DESIGN/design from ~FANGLEI/design10.0:feature/10.0 to feature/10.0

* commit '92825af427883c4e7b7e84c67ce37741d25a4f70':
  REPORT-56926 【FRM布局推荐】组件复用-手动间距目前不支持输入小数(允许输入小数,但自动取整处理)
feature/10.0
fanglei 3 years ago
parent
commit
40db5f77ee
  1. 76
      designer-base/src/main/java/com/fr/design/gui/itextfield/UIPositiveAndNegativeIntNumberField.java
  2. 25
      designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormMultiWidgetCardPane.java

76
designer-base/src/main/java/com/fr/design/gui/itextfield/UIPositiveAndNegativeIntNumberField.java

@ -1,76 +0,0 @@
package com.fr.design.gui.itextfield;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
import java.awt.Toolkit;
public class UIPositiveAndNegativeIntNumberField extends UINumberField {
private static final long serialVersionUID = 4946379346015964509L;
public void setFieldDocument() {
setDocument(createNumberDocument());
}
public class NumberDocument extends PlainDocument {
private static final long serialVersionUID = 1024213269275179172L;
public NumberDocument() {
}
public boolean checkString(int offset, String s, String str) {
String strNew = str.substring(0, offset) + s + str.substring(offset, getLength());
return isMinusSignOnly(strNew) || (isIntNumber(strNew) && isInputIllegalNumber(strNew) && !isOverMaxOrMinValue(strNew));
}
public void insertString(int offset, String s, AttributeSet a) throws BadLocationException {
String str = getText(0, getLength());
if (!checkString(offset, s, str)) {
Toolkit.getDefaultToolkit().beep();
return;
}
setisContentChanged(true);
super.insertString(offset, s, a);
}
private boolean isMinusSignOnly(String s) {
return s.contains("-") && s.length() == 1;
}
/**
* 输入字符是否是不合法数字
* @param s 输入的字符串
* @return 是否不合法
*/
private boolean isInputIllegalNumber(String s) {
try {
Integer.parseInt(s);
} catch (Exception e) {
return false;
}
return true;
}
private boolean isIntNumber(String s) {
boolean result = true;
for (int i = 0; i < s.length(); i++) {
String ch = s.charAt(i) + "";
if (!ch.matches("^[0-9\\-]+$")) {
result = false;
}
}
return result;
}
private boolean isOverMaxOrMinValue(String s) {
int value = Integer.parseInt(s);
return (value < getMinValue() || value > getMaxValue());
}
}
public NumberDocument createNumberDocument() {
return new NumberDocument();
}
}

25
designer-form/src/main/java/com/fr/design/mainframe/widget/ui/FormMultiWidgetCardPane.java

@ -4,7 +4,7 @@ import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.gui.frpane.AttributeChangeListener;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itextfield.UIPositiveAndNegativeIntNumberField;
import com.fr.design.gui.itextfield.UINumberField;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
@ -157,31 +157,34 @@ public class FormMultiWidgetCardPane extends FormWidgetCardPane {
return createTitleLayout(Toolkit.i18nText("Fine-Design_Multi_Selection_Manual_Spacing"), centerPane);
}
private UIPositiveAndNegativeIntNumberField createIntNumberField(boolean isVertical) {
final UIPositiveAndNegativeIntNumberField intNumberField = new UIPositiveAndNegativeIntNumberField();
intNumberField.addFocusListener(new FocusAdapter() {
private UINumberField createIntNumberField(boolean isVertical) {
final UINumberField numberField = new UINumberField();
numberField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
distributionDoChange(intNumberField.getText(), isVertical);
distributionDoChange(numberField, isVertical);
}
});
intNumberField.addKeyListener(new KeyAdapter() {
numberField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
distributionDoChange(intNumberField.getText(), isVertical);
distributionDoChange(numberField, isVertical);
}
}
});
return intNumberField;
return numberField;
}
private void distributionDoChange(String text, boolean isVertical) {
private void distributionDoChange(UINumberField numberField, boolean isVertical) {
String text = numberField.getText();
if (StringUtils.isNotEmpty(text) && StableUtils.isNumber(text)) {
int gap = (int) Math.floor(Float.parseFloat(text));
numberField.setValue(gap);
if (isVertical) {
arrangement.verticalManualDistribution(Math.round(Float.parseFloat(text)));
arrangement.verticalManualDistribution(gap);
} else {
arrangement.horizontalManualDistribution(Math.round(Float.parseFloat(text)));
arrangement.horizontalManualDistribution(gap);
}
attributeChanged();
}

Loading…
Cancel
Save