想学Swing,入门超详细!

先看第一部分完成的图
在这里插入图片描述

1.先做一个界面出来

public class JFrameDemo1 {
    
    
	public static void main(String args[]) {
    
    
		JFrame jf = new JFrame("第一个图形界面");
		//加标题
		jf.setTitle("第一个图形界面");
		//默认坐标是0,0 左上角是原点
		jf.setLocation(100, 100);
		//设置尺寸
		jf.setSize(500, 500);
		
		
		//尺寸和坐标可以用一个方法来写 下面这句
		//jf.setBounds(100, 100, 500, 500);
		//前两个是坐标 后两个是页面的大小

		//修改窗体图标
		//自己下载好图片文件复制到src目录底下,然后再复制到ImageIcon里
		jf.setIconImage(new ImageIcon("Login.png").getImage());

		//设置关闭窗口关闭虚拟机
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置窗体可见
		jf.setVisible(true);
		
		
		
	}
}

2.做适合我们电脑屏幕的窗口(让它在屏幕正中显示)

public class JFrameDemo2 {
    
    
	
	private static final int WIDTH=300;//窗口的宽
	private static final int HEIGHT=300;//窗口的高
	public static void main(String args[]) {
    
    
		JFrame jf = new JFrame("第一个图形界面");

		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension screenSize = toolkit.getScreenSize();
		//得到屏幕的尺寸
		int height=screenSize.height;
		int width=screenSize.width;
		//设置布局
		jf.setBounds((width-WIDTH)/2,(height-HEIGHT)/2, WIDTH, HEIGHT);
		//修改窗体图标
		jf.setIconImage(new ImageIcon("Login.png").getImage());
		//设置关闭窗口关闭虚拟机
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置窗体可见
		jf.setVisible(true);

	}
}

3.有了基本的窗体,下一步我们要在里面添加东西啦。
为了方便起见,我们把生成床体的代码放到一个方法中
initFrame()

package gui2;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.TexturePaint;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

import com.sun.tools.jdeprscan.resources.jdeprscan;

public class JFrameDemo2 {
    
    

	private static final int WIDTH = 300;
	private static final int HEIGHT = 300;

	public static void main(String args[]) 
	{
    
    

		//把创建窗体放到一个方法当中 然后去调用
		JFrame jf = initFrame();
		//创建一个按钮
		JButton jb = new JButton("点我试试");
		 
		//把按钮添加到jframe
		//边界布局
		jf.add(jb,BorderLayout.SOUTH);//东南西北中五处可放
		jf.setVisible(true);

	}



	public static JFrame initFrame() 
	{
    
    
		JFrame jf = new JFrame("第一个图形界面");

		
		//尺寸和坐标可以用一个方法来写
		//前两个是坐标 后两个是页面的大小
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension screenSize = toolkit.getScreenSize();//得到屏幕的尺寸
		int height=screenSize.height;
		int width=screenSize.width;
		jf.setBounds((width-WIDTH)/2,(height-HEIGHT)/2, WIDTH, HEIGHT);
		


		
		//修改窗体图标
		jf.setIconImage(new ImageIcon("Login.png").getImage());
		//设置关闭窗口关闭虚拟机
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置窗体可见
		return jf;
	}
}

下面介绍几种布局(简单概括)
1.边界布局
分为东西南北中
2.流式布局
从第一行开始,从中间开始布局
3.网格布局
首先需要明确网格的行数,列数,然后进行布局。

package gui2;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TexturePaint;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

import com.sun.tools.jdeprscan.resources.jdeprscan;

public class JFrameDemo3 {
    
    

	private static final int WIDTH = 300;
	private static final int HEIGHT = 300;

	public static void main(String args[]) 
	{
    
    

		
		//把创建窗体放到一个方法当中 然后去调用
		JFrame jf = initFrame();
		//创建一个按钮
		JButton jb = new JButton("点我试试");
		JButton jb1 = new JButton("点我试试1");
		JButton jb2 = new JButton("点我试试2");
		 
		//把按钮添加到jframe
		//jf.add(jb,BorderLayout.SOUTH);//东南西北中五处可放
		
		//流式布局
//		jf.setLayout(new FlowLayout(FlowLayout.CENTER,10,10 ));
//		jf.add(jb);
//		jf.add(jb1);
//		jf.add(jb2);
		
		//网格布局
		jf.setLayout(new GridLayout(2,2));
		jf.add(jb);
		jf.add(jb1);
		jf.add(jb2);
		jf.setVisible(true);

	}



	public static JFrame initFrame() 
	{
    
    
		JFrame jf = new JFrame("第一个图形界面");

		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension screenSize = toolkit.getScreenSize();//得到屏幕的尺寸
		int height=screenSize.height;
		int width=screenSize.width;
		jf.setBounds((width-WIDTH)/2,(height-HEIGHT)/2, WIDTH, HEIGHT);
	
		//修改窗体图标
		jf.setIconImage(new ImageIcon("Login.png").getImage());
		//设置关闭窗口关闭虚拟机
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置窗体可见
		return jf;
	}
}

在这里插入图片描述

开始做这个图

package gui2;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TexturePaint;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import com.sun.tools.jdeprscan.resources.jdeprscan;

import sun.awt.image.PixelConverter.Bgrx;

public class JPanelDemo1 {
    
    

	private static final int WIDTH = 300;
	private static final int HEIGHT = 300;

	public static void main(String args[]) 
	{
    
    

		JFrame jf = initFrame();
		//初始化一个窗体
		jf.setLayout(new GridLayout(8,1));
		//八列
		//窗体采用网格布局
		
		//==============用户名======================
		JPanel jp1 = new JPanel();
		//创建一个面板  面板默认是流式布局
		JLabel label = new JLabel("请输入用户名;",new ImageIcon("Login.png"),JLabel.CENTER);
		//设置LABLE的文字颜色
		label.setForeground(Color.blue);
		//文本框  输的地方
		JTextField jtf = new JTextField(10);
		
		jp1.add(label);
		jp1.add(jtf);
		//================end====================
		
		//================密码====================
		JPanel jp2 = new JPanel();
		
		JLabel label2 = new JLabel("请输入密码;",new ImageIcon("Login.png"),JLabel.CENTER);

		//文本框  输的地方
		JPasswordField jpf = new JPasswordField(10);
		
		jp2.add(label2);
		jp2.add(jpf);
		
		//================end=====================

		
		
		
		//=================自我介绍(文本域)=================
		JPanel jp3 = new JPanel();
		JLabel lable3 = new JLabel("自我介绍");
		JTextArea jta = new JTextArea(5, 30);
		jta.setLineWrap(true);//设置这个输入文字才会换行
		
		jp3.add(lable3);
		jp3.add(jta);
		
		//=================end====================
		
		
		
		//=============Box
		JPanel jp4 = new JPanel();
		JLabel label4 = new JLabel("请选择编程语言");
		JComboBox<String> box = new JComboBox<String>();
		box.addItem("java");
		box.addItem("python");
		box.addItem("c");
		box.addItem("c++");
		box.addItem("swift");
		jp4.add(label4);
		jp4.add(box);
		
		//===================
		
		
		//=============CheckBox 多选
		JPanel jp5 = new JPanel();
		JLabel label5 = new JLabel("请选择你的爱好");
		JCheckBox  jcb1 = new JCheckBox("篮球");
		JCheckBox  jcb2 = new JCheckBox("足球");
		JCheckBox  jcb3 = new JCheckBox("排球");
		JCheckBox  jcb4 = new JCheckBox("网球");

		jp5.add(label5);
		jp5.add(jcb1);
		jp5.add(jcb2);
		jp5.add(jcb3);
		jp5.add(jcb4);
		
		//===================
		
		
		//=============单选
		JPanel jp6 = new JPanel();
		JLabel label6 = new JLabel("请选择性别");
		JRadioButton jrb1 = new JRadioButton("男");
		JRadioButton jrb2 = new JRadioButton("女");
		JRadioButton jrb3 = new JRadioButton("保密");
		ButtonGroup bg = new ButtonGroup();//放到一个组里才能实现单选
		bg.add(jrb1);
		bg.add(jrb2);
		bg.add(jrb3);
		jp6.add(label6);

		jp6.add(jrb1);
		jp6.add(jrb2);
		jp6.add(jrb3);

		
		//===================
		
		
		
		//============= 面板7
		JPanel jp7 = new JPanel();
		JLabel label7 = new JLabel("请选择头像");
		JTextField jtf7 = new JTextField(10);
		JButton btn = new JButton("选择头像");

		jp7.add(label7);
		jp7.add(jtf7);
		jp7.add(btn);
		//给按钮绑定事件   点击按钮执行下面的方法  (这是一个匿名内部类)
		btn.addActionListener(new ActionListener(){
    
    
			
			@Override
			public void actionPerformed(ActionEvent e) {
    
    
				// TODO Auto-generated method stub
				JFileChooser jfile = new JFileChooser();//出现文件选项
				int result = jfile.showOpenDialog(null);
				//取消,没有选择任何文件CANCEL_OPTION
				//打开,选择了文件APPROVE_OPTION
				if(result == JFileChooser.APPROVE_OPTION) {
    
    
					//选择了文件的话,将文件的路径显示在文本框中
					String path = jfile.getSelectedFile().getAbsolutePath();
					jtf7.setText(path);
				}
			}
		});

		
		//===================
		
		
		
		//=============面板8
		JPanel jp8 = new JPanel();
		JButton regBtn = new JButton("---注册---");
		regBtn.addActionListener(new ActionListener() {
    
    
			
			@Override
			public void actionPerformed(ActionEvent e) {
    
    
				// TODO Auto-generated method stub
				//我希望一点弹出一个对话框
//				JOptionPane.showMessageDialog(null, "注册成功");
				//我希望一个确认的框
//				int i = JOptionPane.showConfirmDialog(null, "确认删除吗?");
//				System.out.println(i);
				//弹入一个输入的框
				JOptionPane.showInputDialog(null);
			}
		});
		jp8.add(regBtn);


		
		//===================end
		
		//把面板加入到窗体当中
		jf.add(jp1);
		jf.add(jp2);
		jf.add(jp3);
		jf.add(jp4);
		jf.add(jp5);
		jf.add(jp6);
		jf.add(jp7);
		jf.add(jp8);
		
		
		
		
		jf.setVisible(true);

	}



	public static JFrame initFrame() 
	{
    
    
		JFrame jf = new JFrame("第一个图形界面");
		//加标题
		//jf.setTitle("第一个图形界面");
		//默认坐标是0,0 左上角是原点
//		jf.setLocation(100, 100);
//		//设置尺寸
//		jf.setSize(500, 500);
		
		
		//尺寸和坐标可以用一个方法来写
		//前两个是坐标 后两个是页面的大小
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension screenSize = toolkit.getScreenSize();//得到屏幕的尺寸
		int height=screenSize.height;
		int width=screenSize.width;
		jf.setBounds((width-WIDTH)/2,(height-HEIGHT)/2, WIDTH, HEIGHT);
		


		
		//修改窗体图标
		jf.setIconImage(new ImageIcon("Login.png").getImage());
		//设置关闭窗口关闭虚拟机
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置窗体可见
		return jf;
	}
}

实现事件的处理
以及adapt适配器的妙用

package gui5;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TexturePaint;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;



public class EventDemo3 {
    
    

	private static final int WIDTH = 300;
	private static final int HEIGHT = 300;

	public static void main(String args[]) 
	{
    
    
		JFrame jf = initFrame();
		
		JPanel jp = new JPanel();
		
		JTextField jtf =  new JTextField(100);
		
		JButton jb = new JButton("点击一下");
		jb.addMouseListener(new MouseAdapter() {
    
    
		//本来有好几个监听事件 现在我只想要点击的监听 用适配器可以避免报错
			@Override
			public void mouseClicked(MouseEvent e) {
    
    
				jp.setBackground(Color.BLUE);
			};
		} );
		
		jtf.addKeyListener(new KeyAdapter() {
    
    
			@Override
			public void keyPressed(KeyEvent e) {
    
    
				char key = e.getKeyChar();
				if(!(key>='0' || key<='9')) {
    
    
					e.consume();//取消事件
				}
				System.out.println(key);
			};

		});
		jp.add(jtf);
		jp.add(jb);
		
		jf.add(jp);
		
		jf.setVisible(true);

	}



	public static JFrame initFrame() 
	{
    
    
		JFrame jf = new JFrame("第一个图形界面");
		//加标题
		//jf.setTitle("第一个图形界面");
		//默认坐标是0,0 左上角是原点
//		jf.setLocation(100, 100);
//		//设置尺寸
//		jf.setSize(500, 500);
		
		
		//尺寸和坐标可以用一个方法来写
		//前两个是坐标 后两个是页面的大小
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		Dimension screenSize = toolkit.getScreenSize();//得到屏幕的尺寸
		int height=screenSize.height;
		int width=screenSize.width;
		jf.setBounds((width-WIDTH)/2,(height-HEIGHT)/2, WIDTH, HEIGHT);
		


		
		//修改窗体图标
		jf.setIconImage(new ImageIcon("Login.png").getImage());
		//设置关闭窗口关闭虚拟机
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置窗体可见
		return jf;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_45663946/article/details/108740491