Swing学习(1) - 简单控件学习、面向事件编程

基础知识

  • JFrame
    JFrame类称为“框架类”,是一个窗口的框架,拥有Windows窗口所有性质和最大化、最小化、可移动、可关闭等操作。
	    JFrame jfmMain = new JFrame("~ SwingStudy ~");
		jfmMain.setSize(850, 800);          
		 // 设置窗口大小
		jfmMain.setLocationRelativeTo(null);  
		// 设置窗口在屏幕中央
		jfmMain.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
		//设置点击窗口关闭按钮执行的操作“退出”
		jfmMain.setLayout(new BorderLayout());
		//设置布局
  • JLabel
    JLabel类是标签,通常作为窗口标题、说明性文字、解释性文字等等。
        JLabel jlblTopic = new JLabel("简单控件学习");
		jlblTopic.setFont(topicFont);   //设置字体
		jlblTopic.setForeground(TopicFontColor);  //设置字体颜色
		jlblTopic.setHorizontalAlignment(JLabel.CENTER);
  • JPanel
    JPanel类是一种透明的画板,若不设置背景色、边框,是看不见的;它的作用是一块独立画布,可以添加各种控件,控件在画板中的坐标是独立的。
        JPanel jpnlBody = new JPanel();
		jpnlBody.setLayout(new GridLayout(3, 1));
		// 整个中间部分的画板分为3行1列   
  • JButton
    JButton类是命令按钮。
		JButton jbtnYes = new JButton("确认");
		jbtnYes.setForeground(JbtnColor);
		jbtnYes.setFont(NormalFont);
		jpnlBtn.add(jbtnYes, BorderLayout.CENTER);
  • JTextArea
    JTextArea类是多行编辑文本的文本编辑类。
		JTextArea jtxtEdit = new JTextArea();
		jtxtEdit.setFont(NormalFont);
		String str;
		jtxtEdit.append("  " + str);  // 追加在文本框文字的末尾
		jtxtEdit.setText(str);          // 清空文本框设置文本框的内容为“str”
		jtxtEdit.getText()              // 得到文本框的内容(字符串形式)
  • JComboBox
    JComboBox类是下拉列表,是一个泛型类
		JComboBox<String> jcmBook = new JComboBox<>();
		jcmBook.setFont(smallFont);
		private ArrayList<String> bookList = new ArrayList<>();
		bookList.add("追风筝的人");
		bookList.add("萤火虫小巷");
		bookList.add("哈利波特");
		for(int i = 0;i < bookList.size();i++) {
			jcmBook.addItem(bookList.get(i));
		}
  • JCheckBox
    JCheckBox类是复选框
		 java.util.List<JCheckBox> jcbxPlays;
	     String[] playNames = {
			"亲爱的热爱的","家有儿女","武林外传","香蜜沉沉烬如霜"	};
    	jcbxPlays = new ArrayList<>();
		for(int i = 0;i < playNames.length;i++) {
			JCheckBox jcbkPlay = new JCheckBox(playNames[i]);
			jcbkPlay.setFont(NormalFont);
			jpnlChooseMany.add(jcbkPlay);
			jcbxPlays.add(jcbkPlay);
		}
  • TitledBorder
    TitledBorder类是标题框,可以独立设计标题,包括内容、字体、颜色、大小、显示位置、标题对其模式
        TitledBorder ttbdEdit = new TitledBorder("编辑");
		ttbdEdit.setTitleFont(NormalFont);
		ttbdEdit.setTitleColor(TopicFontColor);
		ttbdEdit.setTitlePosition(TitledBorder.TOP);
		//设置标题在框的上部
		ttbdEdit.setTitleJustification(TitledBorder.CENTER);
		//设置标题居中显示
  • JScrollPane
    JScrollPane类是滚动框,当编辑内容超过指定区域时,自动产生一个或两个方向的滚动条
        JTextArea jtxtEdit = new JTextArea();
		jtxtEdit.setFont(NormalFont);
		JScrollPane jscpEdit = new JScrollPane(jtxtEdit);

面向事件编程

在编写响应事件的程序时,首先关注三个基本点:
(1)在哪个控件发生了什么事件
(2)具体是什么事件
(3)要对这个事件进行什么处理

  • 侦听事件举例
  1. 选择复选框的前两个,点击“确定”按钮之后,
    在“显示”文本框显示:
    “你选择了…”
        jbtnYes.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent paramActionEvent) {
				PlaysListener();
			}
		});
		
        public void PlaysListener() {
		jtxtDiag.append("\n你选择了\n");
		for(int i = 0;i < jcbxPlays.size();i++) {
			JCheckBox chk = jcbxPlays.get(i);
			if(chk.isSelected()) {
				String str = playNames[i];
				jtxtDiag.append("  " + str);
			}
		}
	}
         
  1. 在“编辑”文本框编辑“你好”,点击“发送”按钮之后,在“显示”文本框显示“你好”
  jbtnConvey.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				String str = jtxtEdit.getText();
				jtxtDiag.append("\n");
				jtxtDiag.append(str);
			}
		});
  1. 窗口关闭
		jfmMain.addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent paramWindowEvent) {
				jfmMain.dispose();
			}
		
		});	

界面规范化

本着规范化界面的初衷,即,保证界面设计风格的一致性,实现“代码复用”,有关标题字体、大小、颜色;按钮字体、大小、颜色等等可以采用接口将这些设计设置成常量。
还有一些必须完成固定的操作也写在这个接口中,在以后使用界面编程的时候都实现这个接口,就可以很好的提醒我们该做什么操作,避免遗漏。

  • init() 初始化控件内部数据
  • reinit() 重新设置位置、尺寸等
  • dealAction()事件响应的集合
  • showView()显示窗口
  • closeView()关闭窗口
package com.mec.Swing.core;

import java.awt.Color;
import java.awt.Font;

public interface IMecView { 
	public static final Font topicFont = new Font("华文仿宋",Font.BOLD,35);
	public static final Font NormalFont = new Font("华文仿宋",Font.BOLD,25);
	public static final Font smallFont = new Font("华文仿宋",Font.BOLD,20);
	public static final Color TopicFontColor = new Color(255, 128,128);
	public static final Color JbtnColor = new Color(159, 51,116);
	public static final Color menuColor = new Color(69,135,160);
	
	public static final int topicSize = topicFont.getSize();
	public static final int Normalize = NormalFont.getSize();
	public static final int smallSize = smallFont.getSize();
	
	public void init();
	public void reinit();
	public void dealAction();
	public void showView();
	public void closeView();
	
	default void Viewinit() {
		
		
		init();
		reinit();
		dealAction();
	}
}

简单使用各控件实现代码

	
	private JComboBox<String> jcmBook;
	private JComboBox<String> jcmIdol;
	private JComboBox<String> jcmTrival;
	private java.util.List<JCheckBox> jcbxPlays;
		
	private ArrayList<String> bookList = new ArrayList<>();
	private ArrayList<String> idolList = new ArrayList<>();
	private ArrayList<String> trivalList = new ArrayList<>();
		
	private static final String[] playNames = {
			"亲爱的热爱的","家有儿女","武林外传","香蜜沉沉烬如霜"
	};
	
	public ViewStudy() {
		Viewinit();
	}

	@Override
	public void init() {
		jfmMain = new JFrame("~ SwingStudy ~");
		jfmMain.setSize(850, 800);           // 设置窗口大小
		jfmMain.setLocationRelativeTo(null);  // 设置窗口在屏幕中央
		jfmMain.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); //设置点击窗口关闭按钮执行的操作“退出”
		jfmMain.setLayout(new BorderLayout());
		jfmMain.setResizable(false);
		
		jlblTopic = new JLabel("简单控件学习");
		jlblTopic.setFont(topicFont);
		jlblTopic.setForeground(TopicFontColor);
		jlblTopic.setHorizontalAlignment(JLabel.CENTER);
		jfmMain.add(jlblTopic,BorderLayout.NORTH);     
		
		//Jpanel 面板区域可以放JButton、JTextArea、JTextField 等
		jpnlLeft = new JPanel();                       
		jpnlLeft.add(new Label("   "));
		jfmMain.add(jpnlLeft, BorderLayout.WEST);
				
		jpnlRight = new JPanel();
		jpnlRight.add(new Label("   "));
		jfmMain.add(jpnlRight, BorderLayout.EAST);
		
		jpnlBody = new JPanel();
		jpnlBody.setLayout(new GridLayout(3, 1));
		// 整个中间部分的画板分为3行1列   
		jfmMain.add(jpnlBody, BorderLayout.CENTER);
		
		jpnlEdit = new JPanel();
		jpnlEdit.setLayout(new GridLayout(1,1));  
		jpnlBody.add(jpnlEdit);
		
		jtxtEdit = new JTextArea();
		jtxtEdit.setFont(NormalFont);
		JScrollPane jscpEdit = new JScrollPane(jtxtEdit);
		TitledBorder ttbdEdit = new TitledBorder("编辑");
		ttbdEdit.setTitleFont(NormalFont);
		ttbdEdit.setTitleColor(TopicFontColor);
		ttbdEdit.setTitlePosition(TitledBorder.TOP);
		ttbdEdit.setTitleJustification(TitledBorder.CENTER);
		jscpEdit.setBorder(ttbdEdit);
		jpnlEdit.add(jscpEdit);
		
				
		jpnlShow = new JPanel();
		jpnlShow.setLayout(new GridLayout(1,1));  
		jpnlBody.add(jpnlShow);
		
		jtxtDiag = new JTextArea();
		jtxtDiag.setFont(NormalFont);
		JScrollPane jscpShow = new JScrollPane(jtxtDiag);
		TitledBorder ttbdShow = new TitledBorder("显示");
		ttbdShow.setTitleFont(NormalFont);
		ttbdShow.setTitleColor(TopicFontColor);
		ttbdShow.setTitlePosition(TitledBorder.TOP);
		ttbdShow.setTitleJustification(TitledBorder.CENTER);
		jscpShow.setBorder(ttbdShow);
		jpnlShow.add(jscpShow);
						
		jpnlChoose = new JPanel();
		jpnlChoose.setLayout(new GridLayout(2, 1));
		jpnlBody.add(jpnlChoose);
		
		
		JPanel jpnlChooseMany = new JPanel();
		TitledBorder ttbdPlays = new TitledBorder("今天你追剧了吗");
		ttbdPlays.setTitleColor(TopicFontColor);
		ttbdPlays.setTitleFont(NormalFont);
		ttbdPlays.setTitlePosition(TitledBorder.TOP);
		ttbdPlays.setTitleJustification(TitledBorder.CENTER);
		jpnlChooseMany.setBorder(ttbdPlays);
		jpnlChoose.add(jpnlChooseMany);
		
		jcbxPlays = new ArrayList<>();
		for(int i = 0;i < playNames.length;i++) {
			JCheckBox jcbkPlay = new JCheckBox(playNames[i]);
			jcbkPlay.setFont(NormalFont);
			jpnlChooseMany.add(jcbkPlay);
			jcbxPlays.add(jcbkPlay);
		}
				
		JPanel jpnlChooseList = new JPanel();
		jpnlChooseList.setLayout(new FlowLayout());
		TitledBorder ttbdChoose = new TitledBorder("想去哪呢   想看什么   爱豆是谁");
		ttbdChoose.setTitleColor(TopicFontColor);
		ttbdChoose.setTitleFont(NormalFont);
		ttbdChoose.setTitlePosition(TitledBorder.TOP);
		ttbdChoose.setTitleJustification(TitledBorder.CENTER);
		jpnlChooseList.setBorder(ttbdChoose);
		
		JLabel jlblTrival = new JLabel("旅行");
		jlblTrival.setFont(NormalFont);
		jpnlChooseList.add(jlblTrival);
		jcmTrival = new JComboBox<>();
		jcmTrival.setFont(smallFont);
		jpnlChooseList.add(jcmTrival);	
			
		JLabel jlblBook = new JLabel("书籍");  
		jlblBook.setFont(NormalFont);
		jpnlChooseList.add(jlblBook);
		jpnlChoose.add(jpnlChooseList);		
		jcmBook = new JComboBox<>();
		jcmBook.setFont(smallFont);
		jpnlChooseList.add(jcmBook);
		
		
		JLabel jlblIdol = new JLabel("爱豆");
		jlblIdol.setFont(NormalFont);
		jpnlChooseList.add(jlblIdol);		
		jcmIdol = new JComboBox<>();
		jcmIdol.setFont(smallFont);
		jpnlChooseList.add(jcmIdol);		
					
		
		jpnlBtn = new JPanel();
		jpnlBtn.setLayout(new FlowLayout());
		jfmMain.add(jpnlBtn, BorderLayout.SOUTH);
		
		jbtnYes = new JButton("确认");
		jbtnYes.setForeground(JbtnColor);
		jbtnYes.setFont(NormalFont);
		jpnlBtn.add(jbtnYes, BorderLayout.CENTER);
		
		jbtnConvey = new JButton("发送");
		jbtnConvey.setForeground(JbtnColor);
		jbtnConvey.setFont(NormalFont);
		jpnlBtn.add(jbtnConvey, BorderLayout.CENTER);
		
		jbtnExit = new JButton("退出");
		jbtnExit.setForeground(JbtnColor);
		jbtnExit.setFont(NormalFont);
		jpnlBtn.add(jbtnExit, BorderLayout.CENTER);
		
		jbtnConcel = new JButton("取消");
		jbtnConcel.setForeground(JbtnColor);
		jbtnConcel.setFont(NormalFont);
		jpnlBtn.add(jbtnConcel, BorderLayout.CENTER);
		
	}

	@Override
	public void reinit() {

		bookList.add("追风筝的人");
		bookList.add("萤火虫小巷");
		bookList.add("哈利波特");
		
		idolList.add("sehun");
		idolList.add("vivi");
		idolList.add("Evan");
		
		trivalList.add("三亚");
		trivalList.add("首尔");
		trivalList.add("伦敦");
		
		for(int i = 0;i < bookList.size();i++) {
			jcmBook.addItem(bookList.get(i));
		}
		for(int i = 0;i < idolList.size();i++) {
			jcmIdol.addItem(idolList.get(i));
		}
		for(int i = 0;i < trivalList.size();i++) {
			jcmTrival.addItem(trivalList.get(i));
		}
		
	}

	@Override
	public void dealAction() {
		jfmMain.addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent paramWindowEvent) {
				jfmMain.dispose();
			}
		
		});	
	
		jbtnExit.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent paramActionEvent) {
				closeView();
			}
		});
		
		jbtnYes.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent paramActionEvent) {
				PlaysListener();
			}
		});
		
		jbtnConvey.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				String str = jtxtEdit.getText();
				jtxtDiag.append("\n");
				jtxtDiag.append(str);
			}
		});
	}
	
	public void PlaysListener() {
		jtxtDiag.append("\n你选择了\n");
		for(int i = 0;i < jcbxPlays.size();i++) {
			JCheckBox chk = jcbxPlays.get(i);
			if(chk.isSelected()) {
				String str = playNames[i];
				jtxtDiag.append("  " + str);
			}
		}
	}
	
		@Override
		public void showView() {
			jfmMain.setVisible(true);
		}

		@Override
		public void closeView() {
			jfmMain.dispose();
		}
}

public class TestForView {
	public static void main(String[] args) {
		ViewStudy viewMain = new ViewStudy();
		viewMain.showView();
	}
	
}

运行效果
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值