《java轻松学》读书笔记04
版本一:创建方法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);
}
}
运行结果如下: