初学java swing的一些总结

前言:
java swing是用于gui设计的,虽然现在有了很多的替代品,但学习swing可以打下一个好的基础
大致框架如下:
在这里插入图片描述


JFrame 窗体:

import javax.swing.*;


public class test {
    
    
       public test(){
    
    
           JFrame xx=new JFrame("hello world ");//构造方法,可以设计标题,也可不填
           xx.setBounds(100,100,500,300);//设置窗体在屏幕中的位置第一个是x坐标,第二个是y坐标,第三个是宽,第四个是高
           xx.setVisible(true);//窗体可见

       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

我们虽然知道了setBounds可以设定文本框的位置,但x,y究竟是规定的我们并不知道,那么看下图
在这里插入图片描述
setBounds设置的坐标是指文本框左上角的位置
但我们通常喜欢这么写

import javax.swing.*;


public class test extends JFrame {
    
    
       public test(){
    
    
           setTitle("hello world");
           setBounds(100,100,500,300);//设置窗体在屏幕中的位置第一个是x坐标,第二个是y坐标,第三个是宽,第四个是高
           setResizable(true);//是否可以更改窗体大小
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           //设置窗体右上角‘x’的功能
           /*JFrame.DISPOSE_ON_CLOSE 释放窗体资源
          JFrame.DO_NOTHING_ON_CLOSE  什么也不做,也就是点“x”没反应
          JFrame.EXIT_ON_CLOSE 关闭窗口,并停止程序
          JFrame.HIDE_ON_CLOSE  影藏窗口,但程序没有结束

         */
           //xx.setSize(500 ,300);
           //xx.setlocation(100,100);
           //这2行和xx.setBounds(100,100,500,300);功能相同
           setVisible(true);//窗体可见
           System.out.println("x"+f.getX()+"y"+f.getY());//获取坐标


       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

为什么了 ,因为java是面向对象的语言,这样写更方便维护…


Container(窗体容器):
窗体只是一个框架,而框架里的东西是显示在窗体容器中的

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


public class test extends JFrame {
    
    
       public test(){
    
    
           setTitle("hello world");
           setBounds(100,100,500,300);
           setResizable(true);
           Container c=getContentPane();//获取一个窗体容器
           c.setBackground(Color.blue);//设置窗体容器背景颜色


           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

           setVisible(true);//窗体可见


       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

Jlable(标签):

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


public class test extends JFrame {
    
    
       public test(){
    
    
           setBounds(100,100,100,100);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container c=getContentPane();
           
           JLabel l=new JLabel("这是一个标签");
           l.setSize(20,20);//设置标签大小
           l.setText("更改标签类容");
           l.setFont(new Font("楷体",Font.BOLD,15));//设置字体
           l.setForeground(Color.blue);//设置字的颜色
           c.add(l);//忘容器中添加该组件
		   setVisible(true);

       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

标签不仅仅可以放过文字还可以放图片

import javax.swing.*;
import javax.swing.plaf.IconUIResource;
import java.awt.*;


public class test extends JFrame {
    
    
       public test(){
    
    
           setBounds(100,100,100,100);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container c=getContentPane();
           setVisible(true);
           JLabel l=new JLabel("这是一个标签");
           l.setText("更改标签类容");
           l.setFont(new Font("楷体",Font.BOLD,15));//设置字体
           l.setForeground(Color.blue);//设置字的颜色
          Icon picture=new ImageIcon("F:\\代码\\test\\src\\swing\\asdasd.jpg");
          //我们通过Icon找到图片
          l.setIcon(picture);//将图片添加到 标签里
           c.add(l);


       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

效果如下
在这里插入图片描述


JButton(按钮):

import javax.swing.*;
import javax.swing.plaf.IconUIResource;
import java.awt.*;


public class test extends JFrame {
    
    
       public test(){
    
    
           setBounds(100,100,100,100);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container c=getContentPane();
           JButton xx=new JButton("设置内容");
           c.add(xx);
           setVisible(true);


       }

    public static void main(String[] args) {
    
    
        new test();
    }


}


绝对布局:
将组件根据下图的坐标在窗体容器中确定位置
在这里插入图片描述

import javax.swing.*;
import javax.swing.plaf.IconUIResource;
import java.awt.*;


public class test extends JFrame {
    
    
       public test(){
    
    
           setBounds(100,100,100,100);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container c=getContentPane();
           c.setLayout(null );//当设置为null时默认为绝对布局
           JButton xx=new JButton("设置内容");
           xx.setLocation(10,10,60,20);
           c.add(xx);

          setVisible(true);
       }

    public static void main(String[] args) {
    
    
        new test();
    }


}


流布局:
从左到右排列,默认居中对齐
它可以使组件像水一样,向某个方向流动,遇到障碍就折回

import javax.swing.*;
import javax.swing.plaf.IconUIResource;
import java.awt.*;


public class test extends JFrame {
    
    
       public test(){
    
    
           setBounds(100,100,100,100);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container c=getContentPane();
           c.setLayout( new FlowLayout());//给容器设置流布局
           for(int i=0;i<10;i++){
    
    
               c.add(new JButton("按钮"+ i));
           }


          setVisible(true);
       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

如上代码,我们通过循环给容器添加了10个按钮
如下
在这里插入图片描述
我们可以拉动
在这里插入图片描述
在这里插入图片描述
因为默认是居中对齐的,所以呈现了上面的效果,相信大家也明白了流的意思
当然我们也可以设计为左对齐

import javax.swing.*;
import javax.swing.plaf.IconUIResource;
import java.awt.*;


public class test extends JFrame {
    
    
       public test(){
    
    
           setBounds(100,100,100,100);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container c=getContentPane();
           c.setLayout( new FlowLayout(FlowLayout.LEFT));//给容器设置流布局,为左对齐
           for(int i=0;i<10;i++){
    
    
               c.add(new JButton("按钮"+ i));
           }


          setVisible(true);
       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

效果如下
在这里插入图片描述
我们还可以在构造方法中添加水平间距和竖直间距
将设置布局的代码改成如下即可

 c.setLayout( new FlowLayout(FlowLayout.LEFT,30,10));//

效果如下
在这里插入图片描述


边界布局(BorderLayout):
它能将容器划分为5个区域
如下图
在这里插入图片描述

import javax.swing.*;
import javax.swing.plaf.IconUIResource;
import java.awt.*;


public class test extends JFrame {
    
    
       public test(){
    
    
           setBounds(100,100,350,200);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container c=getContentPane();
           c.setLayout(new BorderLayout());
           JButton b1=new JButton("center");
           JButton b2=new JButton("east");
           JButton b3=new JButton("west");
           JButton b4=new JButton("north");
           JButton b5=new JButton("south");
           c.add(b1,BorderLayout.CENTER);
           c.add(b2,BorderLayout.EAST);
           c.add(b3,BorderLayout.WEST);
           c.add(b4,BorderLayout.NORTH);
           c.add(b5,BorderLayout.SOUTH);
          setVisible(true);
       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

在这里插入图片描述
在实际应用中我们可以把button换成自己设计好的类


网格组布局(Gridlayout):
如图
在这里插入图片描述
它有2种常用的构造方式
在这里插入图片描述

import javax.swing.*;
import javax.swing.plaf.IconUIResource;
import java.awt.*;


public class test extends JFrame {
    
    
       public test(){
    
    
           setBounds(100,100,350,200);
           setDefaultCloseOperation(EXIT_ON_CLOSE);
           Container c=getContentPane();
           c.setLayout(new GridLayout(7,3,5,5));//7行3列,水平竖直间距为5
           for(int i=0;i<20;i++){
    
    
               c.add(new JButton());
           }


          setVisible(true);
       }

    public static void main(String[] args) {
    
    
        new test();
    }


}

在这里插入图片描述
如图它会按照,7行3列布局
如果组件数多于网格数,他会自动优化到最优效果


网格组布局:
让我们看看和网格布局的差别
在这里插入图片描述
可见网格组布局是比较灵活的,但也相对麻烦,要实现一个网格组布局有以下步骤
在这里插入图片描述
第三步,也就是定义一个约束对象它有很多属性
在这里插入图片描述

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

public class test {
    
    
    JFrame f=new JFrame();//主窗体
    Container c;//主容器
    void creat(){
    
    
        c=f.getContentPane();
        c.setLayout(new GridBagLayout());//设置为网格组布局
        f.setSize(800,600);

       
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    void init(){
    
    
        GridBagConstraints g1=new GridBagConstraints();
        g1.gridx=1;//设置左上角的位置
        g1.gridy=1;
        c.add(new JButton("组件1"),g1);//添加方法

        GridBagConstraints g2=new GridBagConstraints();
        g2.gridx=2;
        g2.gridy=2;
        c.add(new JButton("组件2"),g2);

        GridBagConstraints g3=new GridBagConstraints();
        g3.gridx=3;
        g3.gridy=3;
        c.add(new JButton("组件3"),g3);



    }
    void init2(){
    
    
        GridBagConstraints g1=new GridBagConstraints();
        g1.gridx=1;
        g1.gridy=1;
        c.add(new JButton("组件1"),g1);

        GridBagConstraints g2=new GridBagConstraints();
        g2.gridx=2;
        g2.gridy=2;
        g2.gridwidth=2;//设置 组件占的行列数
        g2.gridheight=1;
        c.add(new JButton("组件2"),g2);

        GridBagConstraints g3=new GridBagConstraints();
        g3.gridx=3;
        g3.gridy=3;
        g3.gridwidth=2;
        g3.gridheight=2;
        c.add(new JButton("组件3"),g3);
    }
    void Init3(){
    
    
        GridBagConstraints g1=new GridBagConstraints();
        g1.gridx=1;
        g1.gridy=1;
        c.add(new JButton("组件1"),g1);

        GridBagConstraints g2=new GridBagConstraints();
        g2.gridx=2;
        g2.gridy=2;
        g2.gridwidth=2;
        g2.gridheight=1;
        c.add(new JButton("组件2"),g2);

        GridBagConstraints g3=new GridBagConstraints();
        g3.gridx=3;
        g3.gridy=3;
        g3.gridwidth=2;
        g3.gridheight=2;
        g3.fill=GridBagConstraints.BOTH;//使组件填满所占的行与列

        c.add(new JButton("组件3"),g3);


    }
     void Init4(){
    
    
        GridBagConstraints x=new GridBagConstraints();
        x.anchor=GridBagConstraints.NORTHEAST;//设置为东北方向
        c.add(new JButton("xxx"),x);
    }
      void Init5(){
    
    
        GridBagConstraints x=new GridBagConstraints();
        x.gridx=1;
        x.gridy=1;
        x.insets=new Insets(5,5,5,10);//上下左右边距
        c.add(new JButton("asdasd"),x);

    }
    void init6(){
    
    
        GridBagConstraints x=new GridBagConstraints();
        x.gridx=1;
        x.gridy=1;
        x.ipadx=10;
        x.ipady=10;
        c.add(new JButton("你好"),x);
        x.gridx=7;
        x.gridy=7;
        x.ipadx=-10;//正数是扩大,负数是缩小
        x.ipady=-10;
        c.add(new JButton("你好"),x);

    }
     void init7(){
    
    
        GridBagConstraints x=new GridBagConstraints();
        x.gridx=1;
        x.gridy=1;
        x.weightx=10;
        x.weighty=10;
        c.add(new JButton("你好"),x);

    }
       

    public static void main(String[] args) {
    
    
         test x=new test();
         x.creat();
        // x.init();
       
        x.Init3();
         x.f.setVisible(true);

    }

}

猜你喜欢

转载自blog.csdn.net/jahup/article/details/106314504