Java面向对象编程实例入门

基本格式

创建一个图形用户界面的基本步骤,直接上代码

import javax.swing.*;
import java.awt.*;
import java.io.IOException;

/**
 * Creat By xiao on 2020/4/1
 **/
public class HelloSwingDemo {
    public static void main(String[] args)throws IOException {
        //创建窗口--顶层容器的一个实例
        new HelloSwingGUI();
    }
}
//TODO:基本格式
class HelloSwingGUI extends JFrame{  //1.继承JFrame
    //2.定义组件,把需要的swing定义好
    JLabel messageLab1 ;
    JTextField messageText ;
    JButton okBtn;

    //构造方法
    public HelloSwingGUI(){
        //3.创建组件
        //创建标签
        messageLab1 = new JLabel("Message:");
        //创建文本框
        messageText = new JTextField(10);
        //创建按钮
        okBtn = new JButton("OK");

        //设置窗口组件排列方式
        this.setLayout(new FlowLayout());//流式布局

        //4.添加组件到容器
        this.add(messageLab1);
        this.add(messageText);
        this.add(okBtn);

        //5.设置窗体
        this.setTitle("组件显示");
        this.setSize(300,100);
        //设置当窗体关闭时JVM也推出
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //6.显示窗体--设置窗体可见
        this.setVisible(true);
    }
}

在展示窗口的基础上,有很多布局方法

  个人感觉很类似QT,不过qt习惯了ui界面的直接拖动操作,对于用代码执行有点奇怪。
**所有的创建窗口方法都是new一个实例,就不编写main方法了。**

边界布局

 特点:安放组件时可以添加方位
//TODO:边界布局
class BorderLayoutGUI extends JFrame{
    JButton jb1,jb2,jb3,jb4,jb5;

    public BorderLayoutGUI(){
        jb1 = new JButton("中部");
        jb2 = new JButton("东部");
        jb3 = new JButton("南部");
        jb4 = new JButton("西部");
        jb5 = new JButton("北部");

        this.add(jb1,BorderLayout.CENTER);
        this.add(jb2,BorderLayout.EAST);
        this.add(jb3,BorderLayout.SOUTH);
        this.add(jb4,BorderLayout.WEST);
        this.add(jb5,BorderLayout.NORTH);

        this.setTitle("边界布局案例");
        this.setSize(300,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setVisible(true);

        this.setResizable(false);
    }
}

流式布局

特点:拖动窗口会随窗口而变化位置
//TODO:流式布局
class FlowLayoutGUI extends JFrame{
    JButton [] jbs = new JButton[6];
     public FlowLayoutGUI(){
         String [] s = {"关羽","张飞","赵云","马超","魏延","黄忠"};
         for(int i=0;i<jbs.length;i++){
             jbs[i] = new JButton(s[i]);
         }

         this.setLayout(new FlowLayout());//默认居中

         for (int i=0;i<jbs.length;i++){
             this.add(jbs[i]);
         }

         this.setTitle("流式布局管理案例");
         this.setSize(350,100);
         //设置当窗体关闭时JVM也推出
         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         this.setVisible(true);
     }
}

网格布局

特点:可指定行数,列数
//TODO:网格布局
class GridLayout extends JFrame{
    int size = 9;
    JButton [] jbs = new JButton[size];

    public GridLayout(){
        for (int i=0;i<jbs.length;i++)
            jbs[i] = new JButton(String.valueOf(i+1));

        //设置布局---3行3列,10位行距和列距
        this.setLayout(new java.awt.GridLayout(3,3,10,10));

        for (int i=0;i<jbs.length;i++){
            this.add(jbs[i]);
        }

        this.setTitle("网格布局管理案例");
        this.setSize(300,200);
        //设置当窗体关闭时JVM也推出
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

其它控件

也有点像qt(吐槽)

布局管理器

特点:默认边界布局,相当于一个容器,个人感觉用途在于方便编写代码指定位置
class LayoutGUI extends JFrame{
    JPanel jp1,jp2;
    JButton [] jbs = new JButton[6];

    public LayoutGUI(){
        jp1 = new JPanel();
        jp2 = new JPanel();

        String s[] = {"飒飒","撒旦","手动","我去","委屈","热情"};
        for (int i=0;i<jbs.length;i++)
            jbs[i] = new JButton(s[i]);

        //布局管理器--使用默认的边界布局
        jp1.add(jbs[0]);
        jp1.add(jbs[1]);
        for (int i=2;i<5;i++)
            jp2.add(jbs[i]);

        //把JPanel添加到jFrame
        this.add(jp1, BorderLayout.NORTH);
        this.add(jp2,BorderLayout.SOUTH);
        this.add(jbs[5],BorderLayout.CENTER);

        this.setTitle("综合布局案例");
        this.setSize(300,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

单选/复选框

特点:控件,没有特点
class Register extends  JFrame{
   JPanel jp1,jp2,jp3;
   JLabel jl1,jl2;
   JButton jb1,jb2;
   JCheckBox jcb1,jcb2,jcb3;//复选按钮
   JRadioButton jrb1,jrb2;//单选按钮
   ButtonGroup buttonGroup;//单选按钮组

    public Register(){
        jp1 = new JPanel();
        jp2 = new JPanel();
        jp3 = new JPanel();

        jl1 = new JLabel("你喜欢的运动");
        jl2 = new JLabel("你的性别");
        jb1 = new JButton("注册用户");
        jb2 = new JButton("取消注册");

        jcb1 = new JCheckBox("足球");
        jcb2 = new JCheckBox("篮球");
        jcb3 = new JCheckBox("乒乓球");

        jrb1 = new JRadioButton("男");
        jrb2 = new JRadioButton("女");

        //一定要把jrb1,jrb2加到一个ButtonGroup集中管理
        buttonGroup = new ButtonGroup();
        buttonGroup.add(jrb1);
        buttonGroup.add(jrb2);

        this.setLayout(new GridLayout(3,1));
        jp1.add(jl1);
        jp1.add(jcb1);
        jp1.add(jcb2);
        jp1.add(jcb3);

        jp2.add(jl2);
        jp2.add(jrb1);
        jp2.add(jrb2);

        jp3.add(jb1);
        jp3.add(jb2);

        this.add(jp1);
        this.add(jp2);
        this.add(jp3);

        this.setSize(300,150);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("用户注册");
        this.setVisible(true);
    }
}

下拉框/列表框/滚动窗格组件

特点:控件
//TODO:下拉框/列表框/滚动窗格组件
class ComBoBoxGUI extends JFrame{
    JPanel jp1,jp2;
    JLabel jl1,jl2;
    JComboBox jComboBox;
    JList jList;
    JScrollPane jScrollPane;//滚动面板

    public ComBoBoxGUI(){
        jp1 = new JPanel();
        jp2 = new JPanel();

        jl1 = new JLabel("你的籍贯:");
        jl2 = new JLabel("旅游地点:");

        String [] jg = {"北京","湖南","上海","武汉"};
        jComboBox = new JComboBox(jg);

        String [] add = {"九寨沟","故宫","长城","非洲"};
        jList = new JList(add);

        //设置你希望显示多少个选项
        jList.setVisibleRowCount(3);
        //列表加入到滚动面板
        jScrollPane = new JScrollPane(jList);

        //设置布局,添加组件
        this.setLayout(new GridLayout(2,1));
        jp1.add(jl1);
        jp1.add(jComboBox);

        jp2.add(jl2);
        jp2.add(jScrollPane);

        this.add(jp1);
        this.add(jp2);
        this.setTitle("用户调查");
        this.setSize(200,200);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

按钮事件处理

特点:按钮的特点,下面是一个简单的用户登录界面,图片需要自己导入
//TODO:按钮事件处理
class LoginGUI extends JFrame implements ActionListener {

    private JPanel jPanel1,jPanel2,jPanel3;
    private JLabel jlUser,jlPwd;
    private JButton jbLogin,jbCancel;
    private JTextField jTextField;
    private JPasswordField jPasswordField;

    public LoginGUI(){
        jPanel1 = new JPanel();
        jPanel2 = new JPanel();
        jPanel3 = new JPanel();
        jlUser = new JLabel("用户名");
        jlPwd = new JLabel("密  码");
        jbLogin = new JButton("登录");
        jbCancel = new JButton("取消");
        //控制宽度,美观
        jTextField = new JTextField(10);
        jPasswordField = new JPasswordField(10);

        //组件外观设置
        //设置字体
        Font font = new Font("楷体",Font.BOLD,18);
        jlUser.setFont(font);
        jlPwd.setFont(font);
        jbLogin.setFont(font);
        jbCancel.setFont(font);

        //设置前景色
        Color color = new Color(0,0,255);
        jlUser.setForeground(color);
        jlPwd.setForeground(Color.blue);
        jbLogin.setForeground(color);
        jbCancel.setForeground(color);

        //创建容器(使用默认容器),设置布局管理器
        this.setLayout(new GridLayout(3,1));

        jPanel1.add(jlUser);
        jPanel1.add(jTextField);

        jPanel2.add(jlPwd);
        jPanel2.add(jPasswordField);

        jPanel3.add(jbLogin);
        jPanel3.add(jbCancel);

        this.add(jPanel1);
        this.add(jPanel2);
        this.add(jPanel3);

        //监听注册----注册按钮事件到监听器frame
        jbLogin.addActionListener(this);//this代表这个Frame
        jbCancel.addActionListener(this);

        //设置图标
        ImageIcon icon = new ImageIcon("image/1.jpg");
        this.setIconImage(icon.getImage());

        this.setTitle("用户登录");
        this.setSize(300,180);
        this.setLocation(300,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    //实现接口ActionListener的接收事件和委派事件的actionPerformed
    //当按钮被单击时actionPerformed方法被调用
    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        //检测哪个按钮被单击
        if(actionEvent.getSource()==jbLogin){
            if (check() == true){
                JOptionPane.showMessageDialog(null,
                        "成功登录\n用户名和密码正确","提示",1);
            }
            else
            {
                JOptionPane.showMessageDialog(null,
                        "用户名或者密码错误","提示",2);
            }
        }
        else
            if (actionEvent.getActionCommand()=="取消"){
                clear();
            }
    }

    //自定义方法,检查用户名和密码
    public boolean check(){
        String userName = "dxxy";
        String userPW = "admin";
        String user = jTextField.getText().trim();//trim()去掉多余空格
        String pw = String.valueOf(jPasswordField.getPassword()).trim();
        if (user.equals(userName)&&pw.equals(userPW))
            return true;
        else
            return false;
    }

    //清空文本框
    private void clear(){
        jTextField.setText("");
        jPasswordField.setText("");
    }
}


鼠标事件处理

特点:鼠标的所有事件可以不用覆写(制空),该实例是处理鼠标拖动和按下,实现画图的基本功能
//TODO:鼠标事件处理--徒手绘图
class DragDrawFrame extends JFrame
        implements MouseListener, MouseMotionListener {
    JPanel jPanel;
    int x1,x2,y1,y2;

    public DragDrawFrame(){
        jPanel = new JPanel();
        this.add(jPanel);

        //设置监听
        this.addMouseListener(this);
        this.addMouseMotionListener(this);

        this.setSize(300,300);
        this.setTitle("徒手绘图");
        this.setLocation(400,400);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    //实现接口中的所有方法
    @Override
    public void mouseClicked(MouseEvent mouseEvent) {

    }

    @Override
    public void mousePressed(MouseEvent mouseEvent) {
        x1=mouseEvent.getX();
        y1=mouseEvent.getY();
    }

    @Override
    public void mouseReleased(MouseEvent mouseEvent) {

    }

    @Override
    public void mouseEntered(MouseEvent mouseEvent) {

    }

    @Override
    public void mouseExited(MouseEvent mouseEvent) {

    }

    //鼠标拖动
    @Override
    public void mouseDragged(MouseEvent mouseEvent) {
        //Graphics2D:JAVA中呈现二维形状、文本、图像的基础类,验证码生成用到此类
        Graphics2D g = (Graphics2D)getGraphics();
        x2 = mouseEvent.getX();
        y2 = mouseEvent.getY();
        g.draw(new Line2D.Double(x1,y1,x2,y2));//绘制直线
        x1 = x2;
        y1 = y2;
        g.dispose();//释放此图形的上下文并释放他用到的所有系统资源
    }

    @Override
    public void mouseMoved(MouseEvent mouseEvent) {

    }
}

键盘事件处理

特点:单纯读取键盘按下的数值并检测按下的状态,好像是只支持ascll表的,如果切换英文输入就会出现乱码
//TODO:键盘事件处理
class KeyGUI extends JFrame implements KeyListener{
    JLabel jLabel;

    public KeyGUI(){
        jLabel = new JLabel();

        this.add(jLabel);
        //设置标签文字水平居中
        jLabel.setHorizontalAlignment(SwingConstants.CENTER);
        //设置字体
        jLabel.setFont(new Font("Serif",Font.ITALIC,25));
        //设置前景色
        jLabel.setForeground(Color.RED);

        //添加注册键盘事件监听器
        this.addKeyListener(this);

        //窗口设置
        this.setTitle("键盘处理事件");
        this.setSize(350,200);
        //设置窗口居中
        this.setLocationRelativeTo(this);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //实现KeyListener中的方法
    @Override
    public void keyTyped(KeyEvent keyEvent) {

    }

    @Override
    public void keyPressed(KeyEvent keyEvent) {
        jLabel.setText("键盘字符为"+ keyEvent.getKeyChar()+"事件:key down");
    }

    @Override
    public void keyReleased(KeyEvent keyEvent) {
        jLabel.setText("键盘字符为"+ keyEvent.getKeyChar()+"事件:key up");
    }
}

利用监听器适配器类实现事件处理

特点:因为Java是单继承机制,所有当只能基础一个类时,可以在内部再定义一个类,称之为监听器
//TODO:利用监听器适配器类实现事件处理
class MouseAdapterGUI extends MouseAdapter{
    JFrame jFrame;
    public MouseAdapterGUI(){
        jFrame = new JFrame();
        jFrame.setSize(350,150);
        jFrame.setVisible(true);
        jFrame.addMouseListener(this);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //只需要重写mouseClicked方法

    @Override
    public void mouseClicked(MouseEvent e) {
        jFrame.setTitle("点击坐标为("+e.getX()+","
                        +e.getY()+")");
    }
}

匿名函数

特点:代码的监听器中创建的MouseAdapter是没有实例的,当可以直接覆写它的方法,广泛用于编程(画重点)
//TODO:匿名内部类
class MouseAdapterGUI2 extends JFrame{
    JFrame jFrame;
    public MouseAdapterGUI2(){
        jFrame = new JFrame();
        jFrame.setSize(350,150);
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //方法addMouseListener中定义一个匿名内部类
        jFrame.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                jFrame.setTitle("点击坐标为("+e.getX()+","
                       +e.getY()+")");
            }
        });//匿名内部类结束
    }
}

小结

这些代码过一篇就可以算是图形界面的基本框架有了,可以直接拖到编译器里面运行。如果看完有点帮助,不胜荣幸。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖半仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值