renekton
3 months ago
5 changed files with 221 additions and 96 deletions
@ -0,0 +1,150 @@ |
|||||||
|
package com.fr.design.gui.ispinner; |
||||||
|
|
||||||
|
import com.fine.theme.utils.FineUIUtils; |
||||||
|
import com.formdev.flatlaf.util.ScaledEmptyBorder; |
||||||
|
import com.fr.design.gui.itextfield.UITextField; |
||||||
|
import com.fr.stable.StableUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.event.DocumentEvent; |
||||||
|
import javax.swing.event.DocumentListener; |
||||||
|
import javax.swing.text.AbstractDocument; |
||||||
|
import javax.swing.text.AttributeSet; |
||||||
|
import javax.swing.text.BadLocationException; |
||||||
|
import javax.swing.text.DocumentFilter; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Insets; |
||||||
|
import java.awt.event.FocusAdapter; |
||||||
|
import java.awt.event.FocusEvent; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
|
||||||
|
/** |
||||||
|
* 字母spinner |
||||||
|
* |
||||||
|
* @author Renekton |
||||||
|
* @since 11.0 |
||||||
|
* @Cteated on 2024/09/11 |
||||||
|
*/ |
||||||
|
public class FineUpperCaseSpinner extends UISpinner { |
||||||
|
|
||||||
|
private UITextField textField; |
||||||
|
|
||||||
|
public FineUpperCaseSpinner(double minValue, double maxValue, double dierta) { |
||||||
|
super(minValue, maxValue, dierta); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initComponents() { |
||||||
|
setLayout(new BorderLayout()); |
||||||
|
textField = initTextField(); |
||||||
|
Insets insets = FineUIUtils.getUIInsets("InputTextField.borderInsets", defaultInsets); |
||||||
|
textField.setBorder(new ScaledEmptyBorder(insets.top, insets.left, insets.bottom, insets.right)); |
||||||
|
textField.setOpaque(false); |
||||||
|
add(textField, BorderLayout.CENTER); |
||||||
|
setValue(value); |
||||||
|
|
||||||
|
initArrowPane(); |
||||||
|
componentInitListeners(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void setTextField(double value) { |
||||||
|
textField.getDocument().removeDocumentListener(docListener); |
||||||
|
textField.setText(StableUtils.convertIntToABC((int)value).toUpperCase()); |
||||||
|
textField.getDocument().addDocumentListener(docListener); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
protected UITextField initTextField() { |
||||||
|
int columns = this.numberFieldColumns == 0 ? DEFAULT_NUMBERFIELD_COLUMNS : this.numberFieldColumns; |
||||||
|
UITextField textField = new UITextField(columns) { |
||||||
|
public boolean shouldResponseChangeListener() { |
||||||
|
return false; |
||||||
|
} |
||||||
|
}; |
||||||
|
((AbstractDocument) textField.getDocument()).setDocumentFilter(new DocumentFilter() { |
||||||
|
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { |
||||||
|
fb.insertString(offset, string.toUpperCase(), attr); |
||||||
|
} |
||||||
|
|
||||||
|
public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attr) throws BadLocationException { |
||||||
|
if (string != null) { |
||||||
|
string = string.toUpperCase(); |
||||||
|
} |
||||||
|
fb.replace(offset, length, string, attr); |
||||||
|
} |
||||||
|
}); |
||||||
|
return textField; |
||||||
|
} |
||||||
|
|
||||||
|
protected DocumentListener docListener = new DocumentListener() { |
||||||
|
@Override |
||||||
|
public void removeUpdate(DocumentEvent e) { |
||||||
|
setTextFieldValue(getTextValue()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void insertUpdate(DocumentEvent e) { |
||||||
|
setTextFieldValue(getTextValue()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void changedUpdate(DocumentEvent e) { |
||||||
|
setTextFieldValue(getTextValue()); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
protected void initTextFiledListeners() { |
||||||
|
textField.getDocument().removeDocumentListener(docListener); |
||||||
|
textField.getDocument().addDocumentListener(docListener); |
||||||
|
textField.addFocusListener(new FocusAdapter() { |
||||||
|
@Override |
||||||
|
public void focusGained(FocusEvent e) { |
||||||
|
textFieldFocus = true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void focusLost(FocusEvent e) { |
||||||
|
textFieldFocus = false; |
||||||
|
textField.getDocument().removeDocumentListener(docListener); |
||||||
|
if (!preAction && !nextAction) { |
||||||
|
textField.setText(StableUtils.convertIntToABC((int)value).toUpperCase()); |
||||||
|
} |
||||||
|
textField.getDocument().addDocumentListener(docListener); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
protected void initTextMouseListener() { |
||||||
|
textField.addMouseListener(new MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mouseEntered(MouseEvent e) { |
||||||
|
hover = true; |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void mouseExited(MouseEvent e) { |
||||||
|
hover = false; |
||||||
|
repaint(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public UITextField getTextFieldNew() { |
||||||
|
return textField; |
||||||
|
} |
||||||
|
|
||||||
|
private double getTextValue() { |
||||||
|
try { |
||||||
|
if (StringUtils.isEmpty(textField.getText())) { |
||||||
|
return 1; |
||||||
|
} else if (StringUtils.isNumber(textField.getText())) { |
||||||
|
return Double.parseDouble(textField.getText()); |
||||||
|
} |
||||||
|
return StableUtils.convertABCToInt(textField.getText()); |
||||||
|
} catch (NumberFormatException numberFormatException) { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue