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()+")");
            }
        });//匿名内部类结束
    }
}

小结

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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java面向对象程序设计是一种使用Java语言进行编程的方法。它基于面向对象编程范式,强调将问题划分为多个独立的对象,并通过对象之间的交互解决问题。 Java是一种通用的、跨平台的高级编程语言,广泛用于各个领域的软件开发。面向对象程序设计是Java的核心特性之一,也是其成功的关键因素之一。通过使用面向对象程序设计,开发人员可以将复杂的问题分解为多个简单的对象,每个对象负责特定的功能,从而提高代码的复用性和可维护性。 Java面向对象程序设计的主要特点包括封装、继承和多态。封装可以将对象的实现细节隐藏起来,只暴露必要的接口给其他对象使用,增加了代码的安全性和可读性。继承允许一个类继承另一个类的属性和方法,从而减少了代码的重复编写,提高了代码的可重用性。多态允许一个对象以不同的形态呈现,提供了更灵活的代码设计和扩展能力。 Java面向对象程序设计的核心概念包括类、对象、方法和属性。类是创建对象的模板,它包含了对象的特征和行为。对象是类的实例,具有类定义的属性和方法。方法是类和对象的行为,用于实现特定的功能。属性是类和对象的特征,描述了它们的状态。 对于初学者来说,掌握Java面向对象程序设计是非常重要的。它不仅能帮助他们理解程序的结构和组织,还能提高他们的问题分析和解决能力。Java面向对象程序设计的基本概念和技巧也适用于其他面向对象编程语言,为进一步学习和掌握其他编程语言奠定了良好的基础。 总而言之,Java面向对象程序设计是一种强大且灵活的编程方法,它能够帮助开发人员构建可维护和可扩展的软件系统。通过深入学习和应用Java面向对象程序设计的原理和技术,开发人员能够更好地理解和利用Java语言的特性,提高自己的编程水平。 ### 回答2: 《Java面向对象程序设计PDF》是一本关于Java编程语言面向对象程序设计的电子书。它涵盖了Java编程语言的基础知识和面向对象编程的核心概念。该书主要分为以下几个部分: 首先,它介绍了Java语言的基本语法,包括变量、数据类型、运算符等。这些基础知识对于理解后续的面向对象编程非常重要。 其次,它详细介绍了面向对象编程的核心概念,如类、对象、继承、多态等。通过实例和案例分析,读者可以深入理解这些概念的原理和应用。 此外,该书还介绍了Java的常用类库和API,如集合框架、输入输出流等。这些类库和API为Java开发者提供了丰富的功能和工具,能够提高开发效率和代码质量。 最后,该书还涵盖了一些高级主题,如异常处理、多线程编程、网络编程等。这些主题对于开发具有复杂功能和高性能要求的应用程序非常重要。 总体而言,该书全面而系统地介绍了Java面向对象程序设计的基础知识和高级应用。它适合初学者入门以及有一定Java编程经验的开发者进一步提高自己的编程能力。读者可以通过学习该书,掌握Java面向对象编程的核心概念和技术,从而能够设计和开发出功能强大、灵活性好的Java应用程序。 ### 回答3: Java面向对象程序设计(Object-oriented Programming,简称OOP)是一种应用广泛的程序设计模式,使用Java编程语言进行实现。Java语言将数据和操作封装在对象中,通过定义类和对象之间的关系来实现程序的设计和开发。 在Java面向对象程序设计中,开发者将问题抽象为对象模型,将问题的属性和行为封装在类中。通过创建对象,可以实例化类,并使用类提供的方法进行操作和交互。这种设计思想使得程序具有更高的可重用性和可维护性。 Java面向对象程序设计的优点之一是封装性。通过将数据和方法封装在对象中,可以隐藏内部实现的细节。这样的设计可以有效地保护数据的完整性和安全性,同时提供更加清晰的接口,方便其他对象与之交互。 另一个优点是继承性。Java面向对象程序设计通过继承机制,实现类与类之间的关联和扩展。继承可以使得代码的重用更加方便,提高了程序的可扩展性。同时,借助多态性的特性,可以进行更灵活的编程和适应不同的需求。 此外,Java面向对象程序设计还具有多线程、异常处理和异常处理等特性,使得程序开发更加灵活和稳定。 总的来说,Java面向对象程序设计是一种强大的编程模式,通过封装、继承、多态等基本特性,使得程序更加模块化、可维护性强、可扩展性高。同时,Java面向对象程序设计还提供了很多其他特性,如多线程和异常处理等,使得程序开发变得更加方便和稳定。对于想要学习Java编程或进行软件开发的人来说,掌握Java面向对象程序设计是非常重要的一部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

肖半仙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值