第08周 预习、实验及作业:Java GUI编程

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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值