《java轻松学》读书笔记04

设计高级GUI并分享应用

版本一:创建方法encode()

给按钮Encode/Decode编写事件处理程序

编写方法main()并应用
代码如下:
package gui;

 

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

/**

 * Created by 郑文华 on 2018/7/23.

 */

public class SecretMessageGUI extends JFrame{

    private JTextField txtKey;

    private JTextArea txtIn;

    private JTextArea txtOut;

    //加密方法

    public String encode(String message,int keyVal){

        String output = " ";

 

        char key = (char)keyVal;

        for(int x = 0; x < message.length(); x++) {

            char ch = message.charAt(x);

            //判断是否为字母

            if (ch >= 'A' && ch <= 'Z') {

                ch += key;

                //判断是否超出范围

                if (ch > 'Z') {

                    ch -= 26;

                }

                if (ch < 'A') {

                    ch += 26;

                }

 

            } else if (ch >= 'a' && ch <= 'z') {

                if (ch > 'z') {

                    ch -= 26;

                }

                if (ch < 'a') {

                    ch += 26;

                }

            } else if (ch >= '0' && ch <= '9') {

                ch += (keyVal % 10);

                if (ch > '9') {

                    ch -= 10;

                }

                if (ch < '0') {

                    ch += 10;

                }

 

            }

            output += ch;

        }

        return output;

 

        }

    public SecretMessageGUI(){

        setTitle("Zheng`s Secret Message App");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        getContentPane().setLayout(null);

        txtIn = new JTextArea();//刪除首行

        txtIn.setBounds(10,11,564,140);

        getContentPane().add(txtIn);

        txtOut = new JTextArea();//刪除行首的JTextArea

        txtOut.setBounds(10,210,564,140);

        getContentPane().add(txtOut);

        txtKey = new JTextField();

        txtKey.setBounds(258,173,44,20);

        getContentPane().add(txtKey);

        JLabel lblKey = new JLabel("Key:");

        lblKey.setBounds(202,176,46,14);

        getContentPane().add(lblKey);

        JButton btnEncodedecode = new JButton("Encode/Decode");

        btnEncodedecode.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                String message = txtIn.getText();

                int key = Integer.parseInt(txtKey.getText());

                String output = encode(message,key);

                txtOut.setText(output);

 

            }

        });

        btnEncodedecode.setBounds(312,172,144,23);

        getContentPane().add(btnEncodedecode);

    }

 

    public static void main(String[] args){

        SecretMessageGUI theApp = new SecretMessageGUI();

        theApp.setSize(new java.awt.Dimension(600,400));

        theApp.setVisible(true);

    }

 

 

}

运行结果如下图:


如果输入的长度太长,则会出现如下所示的情况


版本二:改进GUI

设计换行和折词

处理无效输入和用户错误

完整代码如下:

package gui;

 

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

/**

 * Created by 郑文华 on 2018/7/23.

 */

public class SecretMessageGUI extends JFrame{

    private JTextField txtKey;

    private JTextArea txtIn;

    private JTextArea txtOut;

    //加密方法

    public String encode(String message,int keyVal){

        String output = " ";

 

        char key = (char)keyVal;

        for(int x = 0; x < message.length(); x++) {

            char ch = message.charAt(x);

            //判断是否为字母

            if (ch >= 'A' && ch <= 'Z') {

                ch += key;

                //判断是否超出范围

                if (ch > 'Z') {

                    ch -= 26;

                }

                if (ch < 'A') {

                    ch += 26;

                }

 

            } else if (ch >= 'a' && ch <= 'z') {

                if (ch > 'z') {

                    ch -= 26;

                }

                if (ch < 'a') {

                    ch += 26;

                }

            } else if (ch >= '0' && ch <= '9') {

                ch += (keyVal % 10);

                if (ch > '9') {

                    ch -= 10;

                }

                if (ch < '0') {

                    ch += 10;

                }

 

            }

            output += ch;

        }

        return output;

 

        }

    public SecretMessageGUI(){

        setTitle("Zheng`s Secret Message App");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        getContentPane().setLayout(null);

        txtIn = new JTextArea();//刪除首行

        txtIn.setBounds(10,11,564,140);

        txtIn.setLineWrap(true);

        txtIn.setWrapStyleWord(true);

        getContentPane().add(txtIn);

        txtOut = new JTextArea();//刪除行首的JTextArea

        txtOut.setBounds(10,210,564,140);

        txtOut.setLineWrap(true);

        txtOut.setWrapStyleWord(true);

        getContentPane().add(txtOut);

        txtKey = new JTextField();

        txtKey.setBounds(258,173,44,20);

 

        getContentPane().add(txtKey);

        JLabel lblKey = new JLabel("Key:");

        lblKey.setBounds(202,176,46,14);

        getContentPane().add(lblKey);

        JButton btnEncodedecode = new JButton("Encode/Decode");

        btnEncodedecode.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                try {

                    String message = txtIn.getText();

                    int key = Integer.parseInt(txtKey.getText());

                    String output = encode(message, key);

                    txtOut.setText(output);

                }catch (Exception ex){

                    JOptionPane.showMessageDialog(null,"please" +

                            "enter a whole number value for the encryption key:");

                    txtKey.requestFocus();

                    txtKey.selectAll();

 

 

                }

 

            }

        });

        btnEncodedecode.setBounds(312,172,144,23);

        getContentPane().add(btnEncodedecode);

    }

 

    public static void main(String[] args){

        SecretMessageGUI theApp = new SecretMessageGUI();

        theApp.setSize(new java.awt.Dimension(600,400));

        theApp.setVisible(true);

    }

 

 

}

 

运行结果如下:


不合理的key 如下所示:

#笔记##读书笔记#
全部评论

相关推荐

点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 Java
一口洪烧肉:哈哈哈哈哈哈哈哈哈哈哈硬要啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务