• JAVA学习第九课:用Swing开发GUI程序


    Swing:Java中开发图形用户界面的包,支持GUI程序开发的包: javax.swing
    GUI:图形用户界面(视窗界面,代表:桌面应用程序)
    GUI三个层次:界面、控件、渲染

    1、界面开发(窗口,容器)

    -使用的类:javax.swing.JFrame、JWindow、JDialog
    javax.swing.JFrame:最常见的界面
    javax.swing.JWindow:不含标题栏的界面
    javax.swing.HDialog:对话框

    最常见的:JFrame
    
    • 1

    案例:在桌面显示一个JFrame

    
    package customer;
    
    import javax.swing.*;
    
    class Test extends JFrame{	
    	public Test()
    	{
    		super("第一个界面");
    		this.setSize(500,300);
    		this.setLocation(200,200);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关掉之后会自动消失
    		this.setVisible(true);
    	}
    	public static void main (String[] args) throws Exception{
    		
    		new Test();
    		
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    2、控件:如按钮、文本框等

    子容器(面板)、按钮、文本框、下拉菜单、静态文本…

    • 面板:javax.swing.JPanel 容纳控件,更好的布局
      一般情况:界面上添加面板,面板上添加控件
    • 按钮:javax.swing.JButton
    • 文本框:javax.swing.JTextField
    • 界面静态文本:javax.swing.JLabel
    • 密码框: javax.swing.JPasswordField
    • 下拉菜单:javax.swing.JComboBox
    • 单选按钮:JRadioButton
    • 复选框 :JCheckBox
    • 多行文本框:JTextArea
    • 菜单 :JMenuBar /JMenu /JMenuItem
    • 看文档、看构造函数、面板上添加控件!
    import javax.swing.*;
    class TestFrame extends JFrame{
    	private JPanel       jpl = new JPanel();
    	private JButton     jbt = new JButton("注册新用户");
    	private JLabel       jlb = new JLabel("输入您的姓名");
    	private JTextField jtf = new JTextField(10);	
    	private JComboBox jcb = new JComboBox(); 
    	
    	public TestFrame(){		
    		this.add(jpl);
    		jpl.add(jbt);  jpl.add(jlb);   jpl.add(jtf); 
    		jpl.add(jcb);  jcb.addItem("男") ; jcb.addItem("女");
    		
    		
    		
    		
    		this.setSize(300,600);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}	
    	public static void main (String[] args) {
    		TestFrame tf = new TestFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    package customer;
    
    import javax.swing.*;
    import java.awt.*;
    class Test extends JFrame{
    	private JPanel       jpl = new JPanel();
    	private JButton     jbt = new JButton("注册新用户");
    	
    	public Test(){		
    		this.add(jpl);
    		jpl.add(jbt); 
    		Icon icon = new ImageIcon("img.jpg");
    		jbt.setIcon(icon);
    		
    		
    		
    		this.setSize(300,600);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}	
    	public static void main (String[] args) {
    		Test tf = new Test();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    一般情况下,面板上的控件,是优先从上到下放置,一行放不下就到下一行,这叫流式布局
    可以采用坐标布局法
    每个控件位置由它的左上角坐标(setLocation)和宽度高度来确定
    前提:将面板的布局设置为空

    3、渲染
    • 颜色
      • 界面和控件都可以设置背景颜色和前景颜色
      • 前景颜色主要是控件上文字的颜色
      • setBackground设置背景颜色;setForeground设置前景颜色
    案例:将按钮背景设置蓝色,前景设置黄色
    
    • 1
    package customer;
    
    import javax.swing.*;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.*;
    class Test extends JFrame{
    	private JPanel       jpl = new JPanel();
    	private JButton     jbt = new JButton("注册新用户");
    	
    	public Test(){		
    		this.add(jpl);
    		jpl.add(jbt); 
    		jpl.setBackground(new Color(200, 200, 200));
    		jbt.setBackground(Color.BLUE);		
    		jbt.setForeground(Color.YELLOW);
    		
    		
    		
    		this.setSize(300,600);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}	
    	public static void main (String[] args) {
    		Test tf = new Test();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 字体
    • 有文字的控件,都可以设置字体,用setFont函数
    案例:将文本框文字设置大一些  
    
    • 1
    import javax.swing.*;
    import java.awt.*;
    class TestFrame extends JFrame{
    	private JPanel       jpl = new JPanel();
    	private JTextField jtf = new JTextField(10);
    	
    	public TestFrame(){		
    		this.add(jpl);
    		jpl.add(jtf); 
    		Font f = new Font("黑体", Font.BOLD, 200);
    		jtf.setFont(f);
    		
    		
    		
    		
    		this.setSize(300,600);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}	
    	public static void main (String[] args) {
    		TestFrame tf = new TestFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 图标
      • 有些控件,如按钮,上面可以设置图标,setIcon函数
      • 在按钮上设置一个图标
    import javax.swing.*;
    import java.awt.*;
    class TestFrame extends JFrame{
    	private JPanel       jpl = new JPanel();
    	private JButton     jbt = new JButton("注册新用户");
    	
    	public TestFrame(){		
    		this.add(jpl);
    		jpl.add(jbt); 
    		Icon icon = new ImageIcon("img.jpg");
    		jbt.setIcon(icon);
    		
    		
    		
    		this.setSize(300,600);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);		
    	}	
    	public static void main (String[] args) {
    		TestFrame tf = new TestFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    案例:

    • 界面上有一个面板,要求面板颜色从黑色渐渐变成白色
    import javax.swing.*;
    import java.awt.*;
    class Test extends JFrame implements Runnable{
    	private JPanel       jpl = new JPanel();
    	
    	public void run(){
    		for(int i=0;i<=255;i++){
    			Color c = new Color(i, i, i);
    			jpl.setBackground(c);	
    			try{  Thread.sleep(10); } catch(Exception e){}
    		}
    	}
    	public Test(){		
    		this.add(jpl);	
    		this.setSize(300,600);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);		
    		new Thread(this).start();
    	}	
    	public static void main (String[] args) {
    		Test tf = new Test();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 界面从桌面顶端掉下来
    import javax.swing.*;
    import java.awt.*;
    class TestFrame extends JFrame implements Runnable {	
    	int X = 0, Y = 0;
    	public TestFrame(){		
    		this.setSize(300,100);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setVisible(true);	
    		new Thread(this).start();
    	}	
    	public void run(){
    		while(true){
    			X++;  Y=X*X;			this.setLocation(X,Y/50);
    			try{ Thread.sleep(100); }catch(Exception ex){}
    		}
    	}
    	public static void main (String[] args) {
    		TestFrame tf = new TestFrame();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    c语言贪吃蛇游戏
    shell 中 “>“ 与 “>>“ 的区别
    MS31804四通道低边驱动器可替代DRV8804(串行数据接口控制,4个低边功率驱动,内置高侧续流二极管)
    Java笔记——文件操作I/O 02
    apache-atlas-hive-hook-源码分析
    面试官:请求转发和请求重定向有什么区别?
    java计算机毕业设计ssm 音乐播放交流论坛网站
    C 初级学习笔记(基础)
    【无标题】
    高校会议管理系统毕业设计
  • 原文地址:https://blog.csdn.net/weixin_62529383/article/details/127613019