开发Java Swing小程序

星期六一 2024-6-30 76 6/30

使用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秒后清空输入框。

- THE END -

星期六一

6月30日17:40

最后修改:2024年6月30日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论