swing编程

创建一个窗体

import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;

public class SwingLearn {
    public static void main(String[] args) {
        //实例化 JFrame
        JFrame frame = new  JFrame();
        //设置相关属性
        frame.setTitle("Swing学习");//标题
        frame.setSize(300,300);//窗体大小
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击关闭按钮是关闭程序
        frame.setLocationRelativeTo(null);   //设置居中
        frame.setResizable(false); //不允许修改界面大小
        
        //获取容器
        Container container = frame.getContentPane();
        // 未设置Layout时,java默认为flowLayout布局的,设置为null即为清空布局管理器,之后添加组件,常常是设置组件左上角坐标相对于容器左上角(0,0)的x,y值来确定组件的位置,即使更改容器大小也不会改变位置。这种方式常常用于窗体大小固定的容器里。
        frame.setLayout(null);
        //创建按钮
        JButton jButton = new JButton("我是按钮");
        jButton.setBounds(100, 100, 100, 40);
        jButton.setFocusPainted(false);  // 去掉文字周围的虚线框
        //按钮添加到容器中
        container.add(jButton);
        
        //设置显示
        frame.setVisible(true);
    }
    
}


jFrame.setVisible(true); // 因为你第一种写法是先用setVisible(true)显示框架,再用test.setContentPane(panel)将jtextfield组件加进来的。所以只要将setVisible(true)这句话写在后面就可以了。

JButton(按钮)

button.setSize(200,100)

JLabel(标签)

JTextArea(文本域)

JTextField(文本框)

布局

边框布局(BorderLayout)

流式布局(FlowLayout)

卡片布局(CardLayout)

网格布局(GridLayout)

网格包布局(GridBagLayout)

事件处理

jButton1.addMouseListener(new MouseListener() {  
    @Override  
    public void mouseClicked(MouseEvent e) {  
        System.out.println("鼠标点击");  
    }
    // 其他方法省略......
});
// 组件可以添加多个事件
jButton1.addMouseListener(new MouseListener() {  
    @Override  
    public void mouseClicked(MouseEvent e) {  
        System.out.println("鼠标点击");  
    }
    // 其他方法省略......
});

常用监听器

JFrame

创建一个窗体

JFrame jFrame = new JFrame();  
jFrame.setSize(600,400);  // 设置窗体大小
jFrame.setTitle("我是窗体标题");  // 设置窗体标题
jFrame.setVisible(true);  // 设置窗体为可见(默认是不可见的)
// jFrame.setLocation(100,200);  // 设置窗体的位置(距离左上角)
jFrame.setLocationRelativeTo(null);  // 设置窗体出现在屏幕正中间(一般用这个)
// 点击关闭按钮时同时结束程序
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

注意:jFrame.setVisible(true) 需要放在所有组件的最后面,否则有时候会导致某些组件不能显示。

JLabel:标签

  • setSize:设置大小
  • setLocation:设置位置
  • setFont:设置字体
  • setIcon:设置图片
  • setCursor:设置鼠标指针形状
  • setToolTipText:设置 Tip 文本

部分代码:

jLabel1 = new JLabel("hello");  
jLabel1.setSize(200,100);  
jLabel1.setLocation(0,0);  
// 这里需要传入一个Font类型的对象。参数:字体名称、字体样式、大小(磅)  
jLabel1.setFont(new Font("微软雅黑",Font.ITALIC,40));  // 微软雅黑、斜体、40磅  
  
// 标签添加图片  
jLabel2 = new JLabel();  
jLabel2.setSize(300,300);  
jLabel2.setLocation(200,0);  
// 需要一个Icon对象,这是一个接口。一般我们传入他的一个叫ImageIcon的实现类。  
jLabel2.setIcon(new ImageIcon("可爱流萤.jpg"));  // 注意路径。注意图片大小和标签大小要一致,否则显示不全  
// 鼠标放到标签上,变成另一个形状  
jLabel2.setCursor(new Cursor(Cursor.MOVE_CURSOR));  // 传入Cursor对象。参数:Cursor类的静态属性。  
// 显示提示框。像idea那样  
jLabel2.setToolTipText("这是一个tip");

运行

JTextField(文本框)和 JPasswordField(密码框)

  • 文本框和密码框的ActionListener 是用来处理按下回车按键事件的
  • doClick():相当于点击了这个按钮
  • getPassword():获取密码框中的内容
  • setEchoChar(char c):设置密码框中的回显字符,默认是黑点
  • setColumns():文本框使用时,在空布局的情况下不起作用,流式布局可以看到效果,用 m 字母进行衡量。

JProgressBar:进度条

  • setSize:设置大小
  • setLocation:设置位置
  • setFont:设置字体
  • setValue(int value)/getValue():设置/获取当前值
  • setMinimum(int n)/getMinimum:设置/获取最小值
  • setMaximum(int n)/getMaximum:设置/获取最大值
  • setStringPainted(boolean b):显示出任务完成度的百分比
  • setString(String s):设置进度条文本
  • ChangeListener:进度条最常用的监听器

确定模式和不确定模式

确定模拟:进度条有最大值,

不确定模式:一般用于网络下载,因为不确定啥时候下载完成,看网速。

// 构造方法参数:最小值、最大值  
jProgressBar = new JProgressBar(0,10);  
// jProgressBar.setMinimum(20);  // 设置最小值  
// jProgressBar.setMaximum(100);  // 设置最大值  
jProgressBar.setLocation(0,0);  
jProgressBar.setSize(200,20);  
// jProgressBar.setValue(20);  // 蓝条没了,因为设置了最小值。  
// jProgressBar.setValue(30);  
jProgressBar.setStringPainted(true);  // 设置显示完成度百分比(其实是显示字符串,默认是这样)  
// jProgressBar.setString("未完成");  // 显示字符串  
  
// 进度条进行设置监听器。按钮点击十次,进度条进行百分比变化,十次后显示完成。  
// 按钮点击十次  
jButton = new JButton("点击10次");  
jButton.setSize(100,20);  
jButton.setLocation(200,0);  
jButton.addActionListener(e -> {  
    count = count+1;  
    jProgressBar.setValue(count);  
});  
  
// 进度条监听器  
jProgressBar.addChangeListener(new ChangeListener() {  
    @Override  
    public void stateChanged(ChangeEvent e) {  
        System.out.println("changed");  
        // 获取当前值与最大值进行对比,判断任务是否完成  
        if(jProgressBar.getValue() == jProgressBar.getMaximum()){  
            jProgressBar.setString("任务已完成 ");  
        }  
    }  
});  
  
// 不确定进度条  
jNot = new JProgressBar();  
jNot.setSize(100,20);  
jNot.setLocation(0,30);  
jNot.setIndeterminate(true);  // 进度条变为不确定模式。设置最大值和最小值没有用,不改变进度条  

运行