1.运行预习课件"GUI-1"中的登录框界面,并尝试在"用户名"对应的文本框(JTextField)中,输入自己的昵称。并截图上传。
2.查看https://www.cnblogs.com/zhrb/p/8978560.html中的GuessGame代码。完成如下任务:
(1)将Guess游戏改为图形用户界面。即,编写一个GUIGame继承GuessGame,但里面对输入输出的处理采用对话框。
package Gue;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
public class GUIGame extends GuessGame{
private Scanner sc=new Scanner(System.in);
private JFrame jf=new JFrame();
private JPanel p1=new JPanel();
private JPanel p2=new JPanel();
public void go() {
int number = (int) (Math.random() * 10);
jf.setBounds(200,200,500,500);
JLabel j1=new JLabel("请输入你猜的数字:");
p1.add(j1);
JTextField t1=new JTextField(10);
p1.add(t1);
JLabel j2=new JLabel("猜猜看啊");
j2.setFont(new Font("Serif",Font.PLAIN,40));
j2.setForeground(Color.green);
jf.add(j2,BorderLayout.CENTER);
JButton b1=new JButton("确定");
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String s=t1.getText();
int guess=Integer.parseInt(s);
if(guess>number){print("大了");}
if(guess<number){print("小了");}
if(guess==number){print("猜对了");}
}
});
p2.add(b1);
jf.add(p1,BorderLayout.WEST);
jf.add(p2,BorderLayout.SOUTH);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
@Override
public void print(String text) {
JOptionPane.showMessageDialog(null,text,"提示",JOptionPane.WARNING_MESSAGE);
}
@Override
public void println(String text) {
JOptionPane.showMessageDialog(null,text,"提示",JOptionPane.WARNING_MESSAGE);
}
@Override
public int nextInt() {
return sc.nextInt();
}
}
(2)以GuessGame的两种版本(控制台、图形界面)为例,简述这里使用抽象类的好处。
由于抽象类定义了公共的接口,因此可以针对这些接口编写单元测试,而不必关心具体的实现细节。此外,如果需要修改或替换某个实现,只需修改一个类即可,而无需在整个代码库中查找和替换。这使得代码更容易进行测试和维护。
题目1: Swing用户界面组件与事件处理(建议尝试提前完成)
设置GirdLayout的vGap与hGap,观察效果
调大vGap
调大hGap
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
JFrame dlframe =new JFrame();
dlframe.setSize(300,150);
String user1="555";
String pass1="123456";
JPanel jp2=new JPanel();
jp2.add(new JLabel("账号",SwingConstants.RIGHT));
JTextField username=new JTextField(10);
jp2.setLayout(new FlowLayout());
jp2.add(username);
jp2.add(new JLabel("密码",SwingConstants.RIGHT));
JPasswordField pw=new JPasswordField(10);
pw.setEchoChar('*');
jp2.setLayout(new FlowLayout());
jp2.add(pw);
jp2.setLayout(new GridLayout(2,10,10,11));
Border b=BorderFactory.createBevelBorder(0,Color.cyan,Color.green);
jp2.setBorder(b);
JPanel jp=new JPanel();
JButton b1=new JButton("登录");
JButton b2=new JButton("注册");
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(username.getText().equals(user1)&&pw.getText().equals(pass1)){
JOptionPane.showMessageDialog(null,"欢迎用户"+user1+"登陆系统","提示",JOptionPane.WARNING_MESSAGE);
}
else{
JOptionPane.showMessageDialog(null,"账号或密码错误","提示",JOptionPane.WARNING_MESSAGE);
}
}
});
jp.add(b1);
jp.add(b2);
dlframe.add(jp2,BorderLayout.NORTH);
dlframe.add(jp,BorderLayout.SOUTH);
dlframe.setLocationRelativeTo(null);
dlframe.setVisible(true);
}
}