使用Java中的Swing开发一个图形化小程序流程
帮朋友做了一个直播需要的小程序,之前用了好久的SpringBoot来开发网站,用Java主要做后端开发,这次开发图形化小程序也有了一定的心得,来记录一下学到的新知识。
对输入框中的数据进行控制
我这里主要是在输入框中输入数据,以及后面系统对数据进行校验后的校验结果,主要还是使用正则表达式来进行控制,然后新建一个类来继承DocumentFilter
类并重写其insertString
方法和replace
方法。使用String
类的replace
方法来对正则表达式进行匹配,若匹配成功则调用父类中的insertString
方法和replace
方法。
同理,我可以通过这种形式进行举一反三,实现多种形式的数据控制,我的类代码如下:
public class NumericDocumentFilter extends DocumentFilter {
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
String newText = fb.getDocument().getText(0, fb.getDocument().getLength()) + string;
if (newText.matches("^\\d*(\\.\\d{0,2})?$") || newText.matches("^\\d*(\\.\\d{0,2})?:[\\u4e00-\\u9fa5]{0,4}$")) {
super.insertString(fb, offset, string, attr);
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
String newText = fb.getDocument().getText(0, fb.getDocument().getLength()) + text;
if (newText.matches("^\\d*(\\.\\d{0,2})?$") || newText.matches("^\\d*(\\.\\d{0,2})?:[\\u4e00-\\u9fa5]{0,4}$")) {
super.replace(fb, offset, length, text, attrs);
}
}
}
然后对输入框做出限定:
((AbstractDocument) textField1.getDocument()).setDocumentFilter(new NumericDocumentFilter());
对输入框中的数据进行限制还可以直接在本类中进行限制,其原理和上面的类似:
((AbstractDocument) pass_use.getDocument()).setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr)
throws BadLocationException {
if (fb.getDocument().getLength() + string.length() <= 50) { // 限制为10个字符
super.insertString(fb, offset, string, attr);
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
if (fb.getDocument().getLength() + text.length() - length <= 50) {
super.replace(fb, offset, length, text, attrs);
}
}
});
使用java方法将字符串复制到用户的剪切板中:
可以使用Toolkit
类来进行复制操作:
private static void copyToClipboard(String text) {
StringSelection stringSelection = new StringSelection(text);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
}
上面的静态方法可以实现将text复制到用户的剪切板中
给按钮添加事件
这个就是调用按钮对象的addActionListener
()方法,方法中的参数是一个类需要new一个ActionListener()
然后重写actionPerformed(ActionEvent e)
方法,具体代码如下:
activationBTN.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String passwordText = pass_use.getText();
try {
if (MachineCodeUtil.getThisMachineCodeMd5().equals(passwordText)){
if(CheckPassword.write(passwordText)){
new ShowMain().showUI();
jframeMain.setVisible(false);
}else {
pass_use.setText("\u7cfb\u7edf\u6545\u969c\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01");
}
}else {
pass_use.setText("\u5361\u5bc6\u9519\u8bef\uff0c\u8bf7\u786e\u8ba4\u65e0\u8bef\u540e\u8f93\u5165\uff01");
Timer timer = new Timer(2000, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
pass_use.setText("");
}
});
timer.setRepeats(false);
timer.start();
}
} catch (Exception ee) {
ee.printStackTrace();
}
}
});
上述代码主要是对输入框中进行校验后修改输入框中的信息,将校验结果进行提示。其中用到了一个Timer
类,用来实现2秒后清空输入框。
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://miaoweb.online/198/
共有 0 条评论