Java Swing 复习(1)SWING基本组件,使用案例:文本框,密码框,文本域,复选框,单选按钮,下拉列表

下面内容转载自qq_27862695

一:JAVA SWING 基本组件

1      .简介

Swing是一个用于开发Java应用程序用户界面的开发工具包,是由纯Java实现的。以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,不依赖操作系统的支持,这是它与AWT组件的最大区别。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。

2      .Swing的层次结构


3      .Swing容器

Swing容器分为三个:顶层容器、通用容器和专用容器。

3.1   顶层容器

顶层容器可以独立存在,包括JFrame、JDialog、JApplet、JWindow(JDialog不可以独立存在)。

JFrame是大多数应用程序的基本窗口,有边框、标题和按钮,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。


JDialog对话框。在Swing中,有两个对话框类,它们是JDialog类和JOptionPane类。JDialog类提供构造并管理通用对话框,作为对话框的基类。对话框与一般窗口不同,对话框依赖其他窗口,当它所依赖的窗口消失或最小化时,对话框也将消失;窗口还原时,对话框又会自动恢复。JDialog对象也是一种容器,因此也可以给JDialog对话框指派布局管理器,对话框的默认布局为BoarderLayout布局。但组件不能直接加到对话框中,对话框也包含一个内容面板,应当把组件加到JDialog对象的内容面板中。由于对话框依赖窗口,因此要建立对话框,必须先要创建一个窗口。JDialog的构造方法有很多,这里列举最具代表性的一个,JDialog(JFrame f,String s,boolean b),构造一个标题为s,初始化不可见的对话框。参数f设置对话框所依赖的窗口,参数b决定对话框是否强制或非强制型,强制意味着禁止其他窗口输入。JOptionPane类给一些常见的对话框提供许多便于使用的选项,例如下所示


JApplet是一种特殊的Java程序经过编译后可以被嵌入到HTML中,在浏览器内显示一个小程序界面。

JWindow没有边框标题和按钮,用作应用程序的启动画面。

3.2   中间容器

中间容器不能独立存在,必须放在顶层容器内,且能够容纳其他控件,包括JPanel、JScrollPane、JToolBar、JSplitPane、JTabbedPane。用法都是New出对应的面板,可以向其中添加组件,之后放到JFrame中即可,这里不再做一一截图。

       JPanel:最普通的面板,没有特殊功能,主要用来容纳其它控件。

JScrollPane:滚动面板,即带有长宽滚动条,主要用来容纳大型控件。

JToolBar:工具栏面板,包含图标按钮。可以在程序的主窗口之外浮动或是托拽。

JSplitPane:分割式面板。

JTabbedPane:选项卡面板。

3.3   特殊容器


特殊容器其实就是中间容器的一种,只不过它在图形上个更加能够起到美化和专业化的作用。包括JInternalFrame,JLayeredPane,JRootPane等。

JinternalFrame的使用跟JFrame几乎一样,可以最大化、最小化、关闭窗口、加入菜单等功能;唯一不同的是JinternalFrame JInternalFrame不能单独出现,必须依附在最上层组件上。

JLayeredPane:分层窗口,允许组件在需要时互相重叠。


4      .Swing基本组件

继承自JComponent的组件都是swing的基本组件,它们有一些通用的方法,如设置边框、背景颜色等。组件大致分为按钮、文本组件、不可编辑显示组件、菜单、其他组件。

按钮:JButton(常规按钮)、JCheckBox(复选框)、JRadioButton(单选按钮)。

文本组件:JTextField(文本字段)、JPasswoordField(密码框)、JTextArea(纯文本)。

不可编辑显示组件:JLabel(显示不可编辑文本)、JToolTip(显示不可编辑文本)、JProgreesBar(进度条)。

菜单:JMenu(普通菜单)、JPopupMenu(弹出式菜单)。

其他组件:JFileChooser(文件选择器)、JColorChooser(颜色选择器)、JTable(表格)、JTree(树)、JComboBox(下拉框)等等。

组件
标签
JLabel


画板
BufferedImage


表单
文本框
JTextField

密码框
JPasswordField


文本域
JTextArea


复选框
JCheckBox


单选按钮
JRadioButton


下拉列表
JComboBox


滚动条
JScrollPane


菜单栏

JMenuBar

JFrame属性:

 //4. 设置窗体属性        
         this.setTitle("演示流布局管理器"); //设置标题
         this.setSize(200, 200);       //设置
         this.setLocation(200, 200);   //设置窗体出现的位置
         this.setVisible(true);        //设置窗体可见
         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭的同时关闭jvm
         this.setResizable(false);  //Resizable:可调整大小的,设置窗体大小不可变



二:JAVA SWING 布局

1. 边界布局管理器(FlowLayout)


         this.add(jButton, BorderLayout.CENTER);  //布局的中间
     //  this.add(jButton2, BorderLayout.NORTH);  //布局的北边
   //    this.add(jButton3, BorderLayout.WEST);   //布局的西边
         this.add(jButton4, BorderLayout.EAST);   //布局的东边
         this.add(jButton5, BorderLayout.SOUTH);  //布局的南边

复制代码

效果为:


2.流布局管理器(FlowLayout)

//3. 添加各个组件
         this.add(jButton1);  
         this.add(jButton2);  
         this.add(jButton3);   
         this.add(jButton4);   
         this.add(jButton5); 
         //设置流布局
 //      this.setLayout(new FlowLayout()); //默认布局方式为居中
         this.setLayout(new FlowLayout(FlowLayout.LEFT));

3.网格布局管理器(GridLayout)

         //创建组件
         for(int i = 0; i<size; i++){
             jButton[i] = new JButton(String.valueOf(i+1));       
  }
         
         //添加组件
         for(int i = 0; i<size; i++){
             this.add(jButton[i]);
        }
        // 设置网格布局 this.setLayout( new GridLayout(3, 3, 10, 30 ));
 
复制代码

效果为:

4.null

null:空布局(不使用任何布局)
容器不使用任何一个布局
添加组件则通过绝对定位方式添加(通过坐标定位

5.卡片布局

  1.  JFrame frame  = new JFrame("卡片管理") ;  
  2.         CardLayout card = new CardLayout() ;  
  3.         frame.setLayout(card) ;  
  4.         Container con = frame.getContentPane() ;  
  5.         con.add(new JLabel("候选人一号",JLabel.CENTER),"first") ;  
  6.         con.add(new JLabel("候选人二号",JLabel.CENTER),"second") ;  
  7.         con.add(new JLabel("候选人三号",JLabel.CENTER),"third") ;  
  8.         con.add(new JLabel("候选人四号",JLabel.CENTER),"fourth") ;  
  9.         con.add(new JLabel("候选人五号",JLabel.CENTER),"fifth") ;  
  10.         frame.pack();  //这个函数的作用就是根据窗口里面的布局及组件的preferedSize来确定frame的最佳大小。
  11.         frame.setVisible(true) ;  
  12.         card.show(con,"third") ;//展示第三个  
效果图:

三.SWING 事件管理

1.首先这个类要实现ActionListener接口

public class TestChange implements ActionListener {

2.添加事件方法

方法一:

private void addEventHandler(){
		jb.addActionListener(this);
	}

方法二:

private void addEventHandler(){
		jb1.addActionListener(new ActionListener(){


			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("+");
				jl.setText(++count+" ");
			}
			
		});
		jb2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("-");
				jl.setText(--count+" ");
			}
		});
	}


3.重写方法actionPerformed(ActionEvent e)

@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("TestChange.actionPerformed()");
		//获得文本框中的数据
		String s1=jtf1.getText();
		String s2=jtf2.getText();
		
		System.out.println(s1);
		System.out.println(s2);
		
		//设置文本框中的数据
		jtf1.setText(s2);
		jtf2.setText(s1);
	}

整个项目源代码:

package www9m3;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
//可以运行,但是没有运行没有结果???
public class TestChange implements ActionListener {
	private JFrame jf;
	private JTextField jtf1;
	private JTextField jtf2;
	private JButton jb;
	
	public TestChange() {
		jf=new JFrame();
		jtf1=new JTextField(10);
		jtf2=new JTextField(10);
		jb=new JButton("交换");
	}
	
	private void init(){
		jf.setLayout(new FlowLayout());
		
		jf.add(jtf1);
		jf.add(jtf2);
		jf.add(jb);
		
	}
	
	private void addEventHandler(){
		jb.addActionListener(this);
	}
	public void show(){
		init();
		addEventHandler();
		jf.pack();
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new TestChange().show();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("TestChange.actionPerformed()");
		//获得文本框中的数据
		String s1=jtf1.getText();
		String s2=jtf2.getText();
		
		System.out.println(s1);
		System.out.println(s2);
		
		//设置文本框中的数据
		jtf1.setText(s2);
		jtf2.setText(s1);
	}
}



几种基本组件的使用案例:文本框,密码框,文本域,复选框,单选按钮,下拉列表

package www9m12;

import java.awt.FlowLayout;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class TestForm {
	public static void main(String[] args) {
		
		JFrame jf=new JFrame();
		
		
		jf.setLayout(new FlowLayout());
		
		//文本框
		JTextField jtf=new JTextField(10);
		jf.add(jtf);
		
		//密码框
		JPasswordField jpf=new JPasswordField(10);
		jpf.setEchoChar('啊');
		jf.add(jpf);
		
		//文本域
		JTextArea jta=new JTextArea(15,30);
		JScrollPane jsp=new JScrollPane(jta);
		jf.add(jsp);
		
		//复选框
		JCheckBox jcb1=new JCheckBox("aaa");
		JCheckBox jcb2=new JCheckBox("bbb");
		JCheckBox jcb3=new JCheckBox("ccc");
		jf.add(jcb1);
		jf.add(jcb2);
		jf.add(jcb3);
		
		//单选按钮
		JRadioButton jrb1=new JRadioButton("aaa");
		JRadioButton jrb2=new JRadioButton("bbb");
		ButtonGroup bg=new ButtonGroup();
		bg.add(jrb1);
		bg.add(jrb2);
		jf.add(jrb1);
		jf.add(jrb2);
		
		//下拉列表
		JComboBox jcb=new JComboBox();
		String[] items={"---请选择---","aaa","bbb","ccc"};
		for (String item : items) {
			jcb.addItem(item);
		}
		jf.add(jcb);
		
		
		
		
		
		
		
		
		
		
		jf.pack();
		jf.setVisible(true);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
	}
}




  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值