java-swing-基本组件

不乱于心,不困于情,不念过去,不惧将来

SWING

  • swing库是AWT(Abstract Windowing Toolkit)的一个扩展,AWT是java 1.0为支持图形编程而提供的一个包。在功能方面,Swing在其前身的基础上做了很多改进:新组件,扩展的组件特性,更好的时间处理功能和可选择的外观.
  • Swing组件不同于AWT,它是完全由java实现的,这使得它比AWT具有更好的跨平台兼容性。
  • Swing的所有成员都是javax.swing包的一部分,使用swing,需要先用import导入上述包。
  • Swing能够让我们使用操作系统的风格或者新的风格来创建java程序的界面。

swing组件分类

  • 顶层容器:JFrame、JApplet、JDialog、JWindow共4个
  • 中间容器:JPanel、JScrollPane、JSplitPane、JToolBar
  • 基本控件: ImageIcon(图标),JLabel(标签),ITextField(文本框),JTextArea(文本区域),JScrollPane(可滚动窗格),JScrollBar(滚动条),ICheckBox(复选框),JRadioButton(单选按钮),JComboBox(下拉式列表和组合框)。

1、JFrame,JDialog,JWindow与JApplet这四个组件我们统称为最上层(Top-Level)组件,因为其余的Swing组件都必须依附在此四组件之一上才能显示出来。
2、最上层的四个组件都实现了RootPaneContainer接口,RootPaneContainer定义了各种容器取得与设置的方法,这里的容器包括JRootPane,GlassPane,LayeredPane,和ContentPane.

JRootPane的组成结构,并非继承结构:
          JRootPane
             --Glass Pane
             --Layered Pane
                --Content Pane
                --Menu Bar

3、JRootPane包含有GlassPane 与 Layered Pane,而Layered Pane又包含有ContentPane与Menu Bar,其中程序设计者可选择是否使用MenuBar,若没有使用Menu Bar,则ContentPane就会占据整个版面。
4、GlassPane:它是一个透明的面版,主要功能是它或以捕获JFrame上的任何事件。GlassPane的默认值是不可看见的,不过可以将它设为看见的(visible),例如若要在GlassPane上做绘图的工作,就可以在GlassPane上显示出来!
5、四个上层组件类中都有一个默认容器为rootPane,rootPane是JRootPane类型的,但JRootPane类型并不算是真实的容器,我们不能在JRootPane上加入任何的组件!要加必须加在LayeredPane或者是LayeredPane 里的ContentPane上。
6、LayeredPane:它是一个可以重叠组件的面版,本身就是一个容器,可以将它看成是相当多层的置物架,每一层都可以放置物品,而且上面的物品会遮隹下面的物品。
7、ContentPane:是最重要的,且是最常到的容器。它是LayeredPane中的一层,一般视为最底层。通常我们会将组件放在ContentPane上,而不会加在LayeredPane中,因为若将组件加入LayeredPane中必须自选管理组件间层次的关系,这会加重程序维护的困难度。若将组件放入ContentPane,对于像工具栏(ToolBar),PopupMenu等组件,Java会自动高速其层次关系。

创建界面

  1. 要创建Swing应用程序,首先要创建一个表示图形界面的类。这个类的对象将被用作容器,用于放置要显示的其他组件。
  2. 在大多数情况下,主界面是一个简单的窗口(JWindow)或者是一个叫做框架的界面(JFrame类)。
  3. 窗口(JWindow)是一个容器,可被显示到用户界面上。简单窗口没有标题栏,最大化,最小化,和关闭按钮,也没有图形用户界面操作系统的窗口中最常用的其他元素。包括这些创口管理特性的窗口被称为框架(JFrame)。

创建图形swing应用程序的方式

  1. 把界面声明为JFrame或JWindow的子类
			class MyJframe extends JFrame{
			}
  1. 在该类的构造方式中调用父类的构造方法来处理其设置。JFame有两个构造函数JFrame(),JFrame(String),后者字符串为标题栏。
  2. 设置框架窗口的大小,单位为像素,调用其setSize方法设置框架窗口的大小,单位为像素,调用其setSize方法。
  3. 决定窗口关闭窗口时如何办决定窗口关闭窗口时如何办。每个框架的标题栏都有最大化,最小化,和关闭按钮,在java中,当框架被关闭时,正常情况下是让程序继续执行这样必须调用框架的方法setDefaultCloseOperation(),这个方法有四种参数:EXIT_ON_CLOSE:框架被关闭时退出程序;DISPOSE_ON_CLOSE:框架被关闭时,释放框架对象并继续运行应用程序;DO_NOTHING_ON_CLOSE:打开框架窗口并继续运行程序;HIDE_ON_CLOSE:关闭框架窗口,并继续运行程序。
  4. 显示框架显示框架 如果希望框架被创建后便显示出来,可在构造方法中调用setVisible(true)或show()。
package SwingDemo;

import javax.swing.JFrame;

class MyJframe extends JFrame{
	/**通过该类可建立一个JFrame的框架
	 * 重载了构造函数,可选择是否带标题
	 */
	public MyJframe(String s,int len,int weight){
		   super(s);//标题
		   setSize(len,weight);//框架大小
		   setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);//关闭方式
		   setVisible(true);//创建时显示
	}
	public MyJframe(int len,int weight){
		   super();
		   setSize(len,weight);
		   setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		   setVisible(true);
	}
}
public class swingDemo {
	public static void main(String[] args) {
		  MyJframe myJframe = new MyJframe("主界面",100, 100);
	}
}

运行结果
框架图

  1. 当建立一个JFrame组件时,系统会为此JFrame建立JRootPane组件,我们就可以任意地取得JRootPane上的GlassPane , Layered Pane或ContentPane,然后进行其它的操作。

swing组件

  1. 使用swing组件实际上是使用该组件的对象,我们可以通过调用构造方法来创建组件,然后调用相应的方法来正确的设置组件。
  2. 所有的swing组件都是抽象类JComponent的子类,后者包含用于设置组价大小,修改背景颜色,定义文本字体以及设置工具提示的方法。

创建组件其实就是创建该组件的对象,调用该组件的构造方法即可。

JButton btn1 = new JButton("这是一个按钮");

使用组件

所有的swing组件都是抽象类JComponent的子类。所有的组件均从JComponent继承了很多方法,常用方法有:

public void setSize(int width, int height)     //设置组件的大小
public Dimension getSize(Dimension rv)  //将此组件的宽度/高度存储到“返回值”rv 。
public void setVisible(boolean b)               //设置组件是否可见
public void setEnabled(boolean enabled   //参数为true,启用组件,否则禁用组件
public void setForeground(Color fg)          //设置此组件的前景色
public void setFont(Font font)                  //设置此组件的字体。 

在旧版中,swing组件不能直接添加到顶层容器上,必须添加到一个与Swing顶层容器相关的内容面板(content pane)上才能被显示到用户界面。

            JFrame frame = new JFrame();
              Container contentPane =frame.getContentPane();//获得frame的内容面板
             JButton button = new JButton();
             contentPane.add(button);将按钮添加到内容面板上
             或者
               JFrame frame = new JFrame();
              JButton button = new JButton();
               JPanel panel = new JPanel();//新建一个面板
		      panel.add(button);//把按钮添加到该面板上
	         frame.setContentPane(panel);//将上述面板设为frame的内容面板

而新版本的JDK,直接在JFrame中可以调用add(组件)来添加组件,组件将被添加到contentPane。

          JFrame frame = new JFrame();
          JButton button = new JButton();
          frame.add(button);

按钮

button的常用方法

public JButton()                    //创建不带有设置文本或图标的按钮。 
public JButton(Icon icon)     //创建一个带图标的按钮。 
public JButton(String text)  //创建一个带文本的按钮。 
public JButton(String text, Icon icon)//创建一个带初始文本和图标的按钮。 
public void updateUI()     //根据当前外观的值重置 UI 属性。                     
package SwingDemo;

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

class MyJframe extends JFrame{
	public MyJframe(String s,int len,int weight){
		   super(s);//标题
		   setSize(len,weight);//框架大小
		   setDefaultCloseOperation(DISPOSE_ON_CLOSE);//关闭方式
		
	}
}
public class swingDemo {
	public static void main(String[] args) {
		  MyJframe myJframe = new MyJframe("主界面",200, 200);
		  JButton btn1 = new JButton("按钮1");
		  myJframe.getContentPane().add(btn1);
		 myJframe.setVisible(true);	  
	}
}

运行结果
运行图

标签(Jlabel)

  • 标签是一个包含说明性文本,图标,或两者都有的用户组件。可以使用Jlabel来创建标签,它通常用来说明界面上其他组件的用途。用户不能直接编辑

常用方法

构造方法概述
public JLabel()//创建无图像且标题为空的 JLabel。
public JLabel(Icon image)//创建具有指定图像的 JLabel 实例。
public JLabel(String text)//带指定文本的标签
public JLabel(String ,int)//带指定文本的标签和对齐方式的标签
public JLabel(String ,Icon,int)//带指定文本,图标和指定对齐方式的标签
方法概述
public void setText(String text)//设置标签文本
public String getText() //获得标签文本
public void setIcon(Icon icon) //设置该组件上显示的图标
public Icon getIcon()              //获得该组件上显示的图标

对齐方式有SwingConstants接口的三个静态类变量来指定:LEFT,CENTER,RIGHT
例如:

 JLabel  lb1 = new JLabel("第一个标签");
 JLabel lb2 = new JLabel("第二个标签",SwingConstants.LEFT);//创建一个左对齐的标签

文本框(JTextField)

  • 文本框是界面上的一块区域,用户可以通过键盘输入,修改其中的内容,文本框能够处理一行的内容。
    方法
构造方法概述
public JTextField()      //一个空的文本框
public JTextField(String text)   //一个指定文本的文本框
public JTextField(int columns) //一个指定宽度的文本框
public JTextField(String text,int columns)一个指定宽度,包含指定文本的文本框
方法概述
public void setHorizontalAlignment(int alignment)
//设置文本的水平对齐方式。有效值包括:JTextField.LEFT ,JTextField.CENTERJTextField.RIGHT,
JTextField.LEADING JTextField.TRAILING 
public int getHorizontalAlignment()   //返回文本的水平对齐方式。
public void setColumns(int columns)   //设置此 TextField 中的列数
public int getColumns()               //返回此 TextField 中的列数。 
public void setFont(Font f)          //设置当前字体。
public void setText(String t)        //设置文本值
public String getText()             //返回文本值

密码框(JPasswordField)继承了JTextFiled
public void setEchoChar(char c)  //使用指定字符隐藏输入。
public char[] getPassword()   //返回此 TextComponent 中所包含的文本。
package SwingDemo;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("测试界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
	   JPasswordField passwordField = new JPasswordField(10);
	   passwordField.setHorizontalAlignment(JPasswordField.CENTER);
	   passwordField.setEchoChar('*');
	   panel.add(passwordField);
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

运行结果
测试结果

文本区域(JTextArea)

文本区域是能够处理多行输入的可编辑文本框
方法

构造方法
public JTextArea()    //一个空的文本框
public JTextArea(String text)   //构造显示指定文本的新的 TextArea。
public JTextArea(int rows, int columns) //构造具有指定行数和列数的新的空 TextArea。
public JTextArea(String text,int rows, int columns)//构造具有指定文本、行数和列数的文本框
方法概述
public void setLineWrap(boolean wrap)//设置文本到达边界,是否自动换行
public boolean getLineWrap()               //获取文本区是否换行。
public void setWrapStyleWord(boolean word)设置换行方式,
//如果设置为 true,将当前单词换到下一行,false将当前字符换到下一行
public int getLineCount()               //确定文本区中所包含的行数。 
public void append(String str)      //将给定文本追加到文档结尾。
public void insert(String str,  int pos)//将指定文本插入指定位置。
package SwingDemo;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("测试界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
	     JTextArea textArea = new JTextArea("this is a  JTextArea",5,10);
	    textArea.setEditable(true);
	    textArea.setLineWrap(true);
	    textArea.setWrapStyleWord(true);
	    panel.add(textArea);
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

测试界面

滚动条(JScrollBar)

  • 滚动条让用户能够选择大型区域的一部分,已查看其他的内容;通常用于行数很多,无法再图形用户界面中同时全部显示出来的文本区域;
  • 用户可以通过拖动两个箭头之间的滚动快来移动特定的位置。用户单击箭头时,可移动较小的距离,在箭头和滚动快之间单击时,可移动较大的区域。
  • 有些Swing组件内置了滚动条功能,这包括可滑动窗格和列表框,也可单独创建滚动条。

方法

构造方法概述
public JScrollBar()
		//创建一个垂直滚动条,默认值minimum = 0  maximum = 100 value = 0 extent = 10
		//  “跨度”(extent)是指可见区域的大小。它又被称为“可见量”。 
public JScrollBar(int orientation)
		//方向有类常量决定,HORIZONTAL,VERTICAL
		//创建具有指定方向滚动条.默认值:minimum = 0  maximum = 100 value = 0 extent = 10
public JScrollBar(int orientation,int value, int extent, int min, int max)
		//创建具有指定方向、值、跨度、最小值和最大值的一个滚动条。
方法概述
public void setModel(BoundedRangeModel newModel)
		//设置处理滚动条的以下四个基本属性的模型:minimum、maximum、value 和 extent。
public BoundedRangeModel getModel()
		//返回处理滚动条的四个基本属性的数据模型:minimum、maximum、value 和 extent。 
public void setOrientation(int orientation)
		//将滚动条的方向设置为 VERTICAL 或 HORIZONTAL。
public int getOrientation()    //返回组件的方向(横向或纵向)。 

可滚动窗格

  • Swing中的文本区域是不包含水平滚动条和垂直滚动条,单独使用这种组件时,无法加入水平滚动条和垂直滚动条
  • Swing增加了一种新的容器:JScrollPane,可用来放置任何可滚动的组件,在可滚动窗格的构造方法中,可以将其与组件关联起来
  • 滚动条可以使用ScrollPaneConstants的静态类变量来设置。

使用方法

构造方法
public JScrollPane()
        //创建一个空的(无视口的视图)JScrollPane,需要时水平和垂直滚动条都可显示。 
public JScrollPane(int vsbPolicy, int hsbPolicy)
		//创建一个具有指定滚动条策略的空(无视口的视图)
		//vsbPolicy - 指定垂直滚动条策略的一个整数 
		//hsbPolicy - 指定水平滚动条策略的一个整数
		//ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED     需要时显示
		//ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER              从不显示
		//ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS            一直显示
public JScrollPane(Component view)
		//创建一个显示指定组件内容的 JScrollPane,只要组件的内容超过视图大小
		//就会显示水平和垂直滚动条。 
public JScrollPane(Component view,int vsbPolicy,int hsbPolicy)
		//创建一个 JScrollPane,它将视图组件显示在一个视口中,
		//视图位置可使用一对滚动条控制。滚动条策略指定滚动条在何时显示,
方法概述
public void setHorizontalScrollBarPolicy(int policy)//设置水平滚动条策略
public int getHorizontalScrollBarPolicy()    //返回水平滚动条策略值。 
public void setVerticalScrollBarPolicy(int policy)//确定垂直滚动条何时显示在滚动窗格上。
public int getVerticalScrollBarPolicy()  //返回垂直滚动条策略值。 
package SwingDemo;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("测试界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
		 JTextArea textArea = new JTextArea("this is a JTextArea with JScrollBar",3,5);
		JScrollPane scrollPane = new JScrollPane(textArea);
	    panel.add(scrollPane);
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

运行结果

复选框(JCheckBox)和单选按钮(JRadioButton)

(JCheckBox和JRadioButton的方法完全一致)

构造方法
JCheckBox() 
          创建一个没有文本、没有图标并且最初未被选定的复选框。 
JCheckBox(Action a) 
          创建一个复选框,其属性从所提供的 Action 获取。 
JCheckBox(Icon icon) 
          创建有一个图标、最初未被选定的复选框。 
JCheckBox(Icon icon, boolean selected) 
          创建一个带图标的复选框,并指定其最初是否处于选定状态。 
JCheckBox(String text) 
          创建一个带文本的、最初未被选定的复选框。 
JCheckBox(String text, boolean selected) 
          创建一个带文本的复选框,并指定其最初是否处于选定状态。 
JCheckBox(String text, Icon icon) 
          创建带有指定文本和图标的、最初未选定的复选框。 
JCheckBox(String text, Icon icon, boolean selected) 
          创建一个带文本和图标的复选框,并指定其最初是否处于选定状态。 
方法概述
protected String paramString() //返回此 JCheckBox 的字符串表示形式。
package SwingDemo;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("测试界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
	    JCheckBox checkBox = new JCheckBox("选择1");
	    JRadioButton radioButton = new JRadioButton("选择2");
	    panel.add(checkBox);
	    panel.add(radioButton);
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

运行结果

  • 复选框和单选按钮通常是非互斥的,即如果一个容器中有五个复选框,五个可以同时选中或不选中;为了使单选框互斥,必须将相关的组件分组。
  • 要将多个单选按钮组织成一组,只允许每次选中其中一个,可以创建一个ButtonGroup对象。
package SwingDemo;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("测试界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
		 ButtonGroup buttonGroup =new ButtonGroup();
	    JCheckBox checkBox1 = new JCheckBox("选择1");
	    buttonGroup.add(checkBox1);
	    panel.add(checkBox1);
	    JCheckBox checkBox2 = new JCheckBox("选择2");
	    buttonGroup.add(checkBox2);
	    panel.add(checkBox2);
	    JCheckBox checkBox3= new JCheckBox("选择3");
	    buttonGroup.add(checkBox3);
	    panel.add(checkBox3);
	     
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

运行结果

下拉式列表和组合框(JComboBox)

  • JComboBox可创建两种用户界面组件:下拉式列表和组合框
  • 下拉式列表(也叫选择列表)让用户能够选择列表中的一项。列表可被配置成仅当用户单击组件时才显示,这样在图形用户界面占用的空间将更小。
  • 组合框是有附加特性的下拉式列表:有一个文本框,可用来提示响应信息。
构造方法
JComboBox() 
          创建具有默认数据模型的 JComboBox。 
JComboBox(ComboBoxModel aModel) 
          创建一个 JComboBox,其项取自现有的 ComboBoxModel。 
JComboBox(Object[] items) 
          创建包含指定数组中的元素的 JComboBox。 
JComboBox(Vector<?> items) 
          创建包含指定 Vector 中的元素的 JComboBox。 
方法概述
public void addItem(Object anObject)
         //为项列表添加项。仅当 JComboBox 使用可变数据模型时此方法才有效。
public void removeItem(Object anObject)
		//从项列表中移除项。仅当 JComboBox 使用可变数据模型时此方法才有效。
public void removeItemAt(int anIndex)
		//移除 anIndex 处的项。仅当 JComboBox 使用可变数据模型时此方法才有效。
public void removeAllItems()
		//从项列表中移除所有项。
public int getSelectedIndex()
		//返回列表中与给定项匹配的第一个选项。不存在返回-1 
public void setSelectedIndex(int anIndex)
		//选择索引 anIndex 处的项。0代表第一项,-1代表没选
public Object getSelectedItem()
		//返回当前所选项。
package SwingDemo;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class swingDemo {
	public static void main(String[] args) {
	JFrame mainFrame = new JFrame("测试界面");
	     mainFrame.setSize(300, 300);
		 JPanel panel = new JPanel();
		 String s[] =new String[]{"math","english","chinese","physics","chemistry"};
		JComboBox comboBox =new JComboBox(s);
		comboBox.addItem("biology");
		comboBox.removeItemAt(1);
	     panel.add(comboBox);
	     
		 mainFrame.setContentPane(panel);
		 mainFrame.setVisible(true);
	}
}

运行结果
运行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值