javax.swing的基本组成

Posted 从零开始的智障生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javax.swing的基本组成相关的知识,希望对你有一定的参考价值。

目录

一、基本容器

1.1 JFrame

1.2 JDialog

二、基本布局

2.1 AbsoluteLayout

2.2 BorderLayout

2.3 FlowLayout

2.4 GridLayout

三、面板容器

3.1 JPanel

3.2 JScrollPane

四、基本组件

4.1 JLabel带有Icon与ImageIcon

4.2 JButton

4.3 JRadioButton

4.4 JCheckButton

4.5 列表组件

4.5.1 JComboBox

4.5.2 JList

4.6 文本组件

4.6.1 JTextField

4.6.2 JPasswordField

4.6.3 JTextArea


一、基本容器

1.1 JFrame

package com.zyx.mySwing.myContainers;

import java.awt.Color;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
/**
 * java.awt.Container类是javax.swing.JComponent的父类
 * 对于容器,如果继承了了JFrame,则此类可以直接调用getContentPane()获取一个容器Container container =getContentPane(); 
 * 也可以先定义一个JFrame对象jf,然后用jf调用getContentPane()获取一个容器Container container = jf.getContentPane();
 * 
 * 设置容器,需要针对JFrame对象jf设置。jf.set();
 * 添加部件,需要针对Container对象container设置。container.add(JComponent);
 * 
 * JFrame的构造方法:
 * public JFrame()
 * public JFrame(String title)
 */
public class JFrameExp1 extends JFrame{
	public void createFirstJFrame(String title) {
		JFrame jFrame = new JFrame(title);
		Container container = jFrame.getContentPane();//获取一个容器
		JLabel jl = new JLabel("这是一个JFrame窗体");
		// 使标签上的文字居中
		jl.setHorizontalAlignment(SwingConstants.CENTER);
		container.add(jl);
		container.setBackground(Color.blue);
		jFrame.setVisible(true);
		jFrame.setSize(200,150);
		jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//		jFrame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
//		jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
//		jFrame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
	}

	public static void main(String[] args) {
		(new JFrameExp1()).createFirstJFrame("test JFrame");
	}
}

1.2 JDialog

package com.zyx.mySwing.myContainers;

import java.awt.Color;
import java.awt.Container;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
/**
 * JDialog来作为容器,一般情况下其需要基于父容器中生成
 * public JDialog()
 * public JDialog(Frame f)
 * public JDialog(Frame f,boolean model)
 * public JDialog(Frame f,String title)
 * public JDialog(Frame f,String title,boolean model)
 * JFrame是Frame的子类
 * 
 * JDialog只支持:HIDE_ON_CLOSE\\DISPOSE_ON_CLOSE\\DO_NOTHING_ON_CLOSE
 *
 */
public class JDialogwithJFrame extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public JDialogwithJFrame() {
		JFrame jFrame= new JFrame("JFrame contains JDialog");
		Container container = jFrame.getContentPane();
		JLabel jLabel = new JLabel("这是一个JFrame");
		jLabel.setHorizontalAlignment(SwingConstants.CENTER);
		container.add(jLabel);
		JButton jb = new JButton("弹出对话框");
		jb.setBounds(10,10,100,21);
		jb.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				(new MyJDialog(JDialogwithJFrame.this)).setVisible(true);
			}
		});
		container.add(jb);
		jFrame.setBackground(Color.cyan);
		jFrame.setVisible(true);
		jFrame.setSize(200,150);
		jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	class MyJDialog extends JDialog{
		public MyJDialog(Frame frame) {
			super(frame,"myfirst JDialog",true);
			Container container = getContentPane();
			JLabel jl = new JLabel("这是一个JDialog");
			container.add(jl);
//			this.setVisible(true);
			this.setBounds(120,120,100,100);
			this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		}
	}
	public static void main(String[] args) {
		new JDialogwithJFrame();
	}
}

二、基本布局

2.1 AbsoluteLayout

package com.zyx.mySwing.myLayout;

import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
/**
 * Container.setLayout(null);取消布局管理器
 * Component.setBounds();设置每个组件的大小与位置
 */

public class AbsoluteLayout extends JFrame{
	public AbsoluteLayout() {
		setTitle("本窗体使用绝对布局");
		setBounds(100, 100, 500, 500);
		setLayout(null);
		Container container = getContentPane();
		JButton jb1 = new JButton("按钮1");
		JButton jb2 = new JButton("按钮2");
		jb1.setBounds(110, 110, 100, 20);
		jb2.setBounds(110, 140, 100, 20);
		container.add(jb1);
		container.add(jb2);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new AbsoluteLayout();
	}
}

2.2 BorderLayout

package com.zyx.mySwing.myLayout;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.WindowConstants;
/**
 * 边界布局管理器
 * Swing的默认布局管理器是边界布局管理器BorderLayout
 * 组件置于四个位置:
 * BorderLayout.NORTH
 * BorderLayout.SOUTH
 * BorderLayout.EAST
 * BorderLayout.WEST
 * BorderLayout.CENTER
 *
 */
public class BorderLayoutTest extends JFrame{
	String[] border = {BorderLayout.CENTER,BorderLayout.WEST,BorderLayout.EAST,
			BorderLayout.NORTH,BorderLayout.SOUTH};
	String[] buttonName = {"Center","West","East","North","South"};
	public BorderLayoutTest() {
		setTitle("这个窗体使用边界布局管理器");
		Container container =getContentPane();
		setLayout(new BorderLayout());
		for(int i=0;i<border.length;i++) {
			container.add(border[i],new Button(buttonName[i]));
		}
		setSize(500,500);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new BorderLayoutTest();
	}
}

2.3 FlowLayout

package com.zyx.mySwing.myLayout;

import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
/**
 * FlowLayout类中具有以下构造函数:
 * public FlowLayout()
 * public FlowLayout(int aligment)
 * public FlowLayout(int aligment,int horizGap,int vertGap)
 * 构造方法中的aligment参数表示使用流布局管理器后组件在每一行的具体摆放位置。
 * 它可以被赋予以下3个值之一:
 * FlowLayout.LEFT=0	每一行的组件将被指定按照左对齐排列
 * FlowLayout.CENTER=1	每一行的组件将被指定按中间对齐排列
 * FlowLayout.RIGHT=2	每一行的组件将被指定按照右对齐排列
 * horizGap表示组件之间的按像素的水平间隔
 * vertGap表示组件之间的按像素的垂直间隔
 */

public class FlowLayoutTest extends JFrame{
	public FlowLayoutTest() {
		setTitle("本窗口使用流布局管理器");
		Container container = getContentPane();
		setLayout(new FlowLayout(1,10,10));
		for(int i=0;i<5;i++) {
			container.add(new JButton("button"+i));
		}
		setSize(500,500);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new FlowLayoutTest();
	}
}

2.4 GridLayout

package com.zyx.mySwing.myLayout;

import java.awt.Button;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.WindowConstants;
/**
 * 网格布局管理器将容器划分为网格,所以组件可以按行和列进行排列。
 * 在网格布局管理器中,每一个组件的大小都相同,并且网格中空格的个数由网格的行数和列数决定,
 * 如一个两行两列的网格能产生4个大小相等的网格。
 * 网络布局管理器主要有以下两个常用的构造方法:
 * public GridLayout(int rows,int cols);
 * public GridLayout(int rows,int cols,int horizGap,int vertGap);
 * rows:行数;cols:列数;horizGap:网格水平距离;vertGap:网格垂直距离
 */

public class GridLayoutTest extends JFrame{
	public GridLayoutTest() {
		Container container = getContentPane();
		setLayout(new GridLayout(7,3,5,5));
		for(int i=0;i<20;i++) {
			container.add(new Button("button"+i));
		}
		setSize(500,500);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new GridLayoutTest();
	}
}

三、面板容器

3.1 JPanel

package com.zyx.mySwing.myPane;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
/**
 * JPanel面板可以聚集一些组件来布局,组件也是一种容器,因为它也继承自java.awt.Container
 * JPanel是一种组件,可以添加到容器中。
 * JPanel是一种容器,可以添加布局,可以添加组件。
 */
public class JPanelTest extends JFrame{
	public JPanelTest() {
		String[] border = {BorderLayout.CENTER,BorderLayout.WEST,BorderLayout.EAST,
				BorderLayout.NORTH,BorderLayout.SOUTH};
		String[] buttonName = {"Center","West","East","North","South"};
		Container container = getContentPane();
		container.setLayout(new GridLayout(2,1,10,10));
		JPanel jp1 = new JPanel(new GridLayout(1,3,10,10));
		JPanel jp2 = new JPanel(new BorderLayout());
		JPanel jp3 = new JPanel(new FlowLayout(1,10,10));
		JPanel jp4 = new JPanel(new GridLayout(2,1,10,10));
		for(int i=0;i<3;i++) {
			jp1.add(new JButton("button"+i));
		}
		for(int i=0;i<border.length;i++) {
			jp2.add(border[i],new JButton(buttonName[i]));
		}
		for(int i=3;i<13;i++) {
			jp3.add(new JButton("button"+i));
		}
		for(int i=13;i<16;i++) {
			jp4.add(new JButton("button"+i));
		}
		container.add(jp1);
		container.add(jp2);
		container.add(jp3);
		container.add(jp4);
		setSize(500,500);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new JPanelTest();
	}
}

3.2 JScrollPane

package com.zyx.mySwing.myPane;

import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
/**
 * 滚动面板:当在一个较小的容器窗体中显示一个较大部分的内容,可以使用JScrollPane面板。
 * JScrollPane是一个容器,但只能放一个组件,并且不可以使用布局管理器。
 * 			  如果想要放多个组件,可以用一个JPanel存储多个组件,然后将JPanel放到JScrollPane中
 * JScrollPane是一个组件,可以放在其他容器中。
 */
public class JScrollPaneTest extends JFrame{
	public JScrollPaneTest() {
		Container container = getContentPane();// 创建容器
		setLayout(new GridLayout(1,3,10,10));
		JTextArea jta = new JTextArea(100,1000);// 创建文本区域组件
		JScrollPane jsp = new JScrollPane(jta);
		container.add(jsp);
		container.add(new JButton("Center"));
		container.add(new JButton("Right"));
		setTitle("带滚动条的文字编译器");
		setSize(500,500);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new JScrollPaneTest();
	}
}

四、基本组件

4.1 JLabel带有Icon与ImageIcon

package com.zyx.mySwing.myComponents;

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;

import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

/**
 * 图标icon,是指
 * public JLabel():创建一个不带图标和文本的JLabel对象
 * public JLabel(Icon icon):创建一个带图标的JLabel对象
 * public JLabel(Icon icon,int aligment):创建一个带图标的JLabel对象,并设置水平对齐方式
 * public JLabel(String text,Icon icon,int aligment):创建一个带文本、图标的JLabel对象,并设置标签内容水平对齐方式
 */
public class JLabelwithIcon implements Icon{ 
	private int width,height;//图标宽高
	public JLabelwithIcon(int w,int h) {
		this.width = w;this.height=h;
	}
	@Override
	public void paintIcon(Component c, Graphics g, int x, int y) {
		g.fillOval(x, y, width, height);//绘制一个圆形图标
	}
	@Override
	public int getIconWidth() {
		return this.width;
	}
	@Override
	public int getIconHeight() {
		return this.height;
	}
	public static void main(String[] args) {
		JLabelwithIcon icon = new JLabelwithIcon(15, 15); 
		JLabel jl = new JLabel("测试",icon,SwingConstants.CENTER);
		JFrame jf = new JFrame();
		Container container  = jf.getContentPane();
		container.add(jl);
		jf.setBackground(Color.cyan);
		jf.setVisible(true);
		jf.setSize(200,150);
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
}
package com.zyx.mySwing.myComponents;

import java.awt.Container;
import java.awt.Image;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

public class JLabelwithImageIcon extends JFrame{
	public JLabelwithImageIcon() {
		Container container = getContentPane();// 创建一个容器
		JLabel jl = new JLabel("这是一个JFrame",JLabel.CENTER);// 创建一个标签
		URL url = JLabelwithImageIcon.class.getResource("m1.png");// 获取图片所在URL
		ImageIcon imageicon = new ImageIcon(url);// 实例化Icon对象
		/**
		 * 接下来修改图片图标大小
		 * 1. 获取图片图标Image 对象
		 * 2. 利用Image的伸缩算法,修改图标图片大小
		 * 3. 然后重新赋值图标图片ImageIcon值为修改过的Image对象
		 */
		Image image = imageicon.getImage();// 获取图标图片
		image = image.getScaledInstance(30, 30, Image.SCALE_DEFAULT);// 将图标图片给缩放一下
		imageicon.setImage(image);// 获取图片
		/*以上三行代码注释掉就取消掉了图片伸缩*/
		
		jl.setIcon(imageicon); // 设置 图标位置为中间
		
//		jl.setHorizontalAlignment(SwingConstants.CENTER); // 设置标签文本水平居中
		jl.setOpaque(true);// 设置标签为不透明
		container.add(jl);// 将标签添加到容器
		setSize(250,100);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new JLabelwithImageIcon();
	}
}

4.2 JButton

package com.zyx.mySwing.myComponents;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

//import sun.awt.www.content.image.jpeg;

/**
 * Swing中的提交按钮由JButton对象表示,其构造方法有以下几种形式:
 * public JButton()
 * public JButton(String text) // 可以显示文本
 * public JButton(Icon icon)	// 可以显示图标
 * public JButton(String text,Icon icon)
 */
public class JButtonTest extends JFrame{
	public JButtonTest() {
		URL url = JLabelwithImageIcon.class.getResource("m1.png");//获取图片路径
		ImageIcon imageicon = new ImageIcon(url);// 设置图片标签
		
		setLayout(new GridLayout(3,2,5,5));// 设置布局
		Container container = getContentPane();
		for(int i=0;i<5;i++) {
			Image image = imageicon.getImage();
			image = image.getScaledInstance(30, 30, Image.SCALE_REPLICATE);
			imageicon.setImage(image);
			JButton jb = new JButton("button"+i,imageicon);
			container.add(jb);
			if(i%2==0) jb.setEnabled(false);// 设置其中一些按钮不可用
		}
		JButton jb = new JButton();// 实例化一个没有文字与图片的按钮
		jb.setMaximumSize(new Dimension(30,30));// 设置按钮与图片相同大小
		jb.setIcon(imageicon); // 为按钮设置图标
		jb.setHideActionText(true);
		jb.setToolTipText("图片按钮");// 设置按钮提示为文字
		jb.setBorderPainted(false); // 设置按钮边界不显示
		jb.addActionListener(new ActionListener() {//为按钮添加监听事件
			public void actionPerformed(ActionEvent e) {
				// 弹出确认对话框
				JOptionPane.showMessageDialog(null, "弹出对话框");
			}
		});
		container.add(jb); // 将按钮添加到容器中
		setVisible(true);
		setSize(500,500);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new JButtonTest();
	}
}

4.3 JRadioButton

/**
 * 单选按钮,有以下构造函数
 * public JRadioButton()
 * public JRadioButton(Icon icon)
 * public JRadioButton(Icon icon,boolean selected)
 * public JRadioButton(String text)
 * public JRadioButton(String text,Icon icon)
 * public JRadioButton(String text,Icon icon,boolean selected)
 * 单选按钮可以被设置成一个按钮组,常用于一个多选情形,如多选题,可以同时具有单选和多选的功能
 * JRadioButton jr1 = new JRadioButton();
 * JRadioButton jr2 = new JRadioButton();
 * ButtonGroup group = new ButtonGroup();
 * group.add(jr1);
 * group.add(jr2); 
 */

4.4 JCheckButton

package com.zyx.mySwing.myComponents;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class JCheckBoxTest extends JFrame{
	private static final long serialVersionUID = 1L;
	private JPanel jp1 = new JPanel();
	private JPanel jp2 = new JPanel();
	private JTextArea jta = new JTextArea(5,15); // 创建文本域
	private JCheckBox jc1 = new JCheckBox("1");
	private JCheckBox jc2 = new JCheckBox("2");
	private JCheckBox jc3 = new JCheckBox("3");
	private JCheckBox[] jcs = {jc1,jc2,jc3};
	
	public JCheckBoxTest() {
		
		Container container = getContentPane();
		container.setLayout(new BorderLayout());
		
		final JScrollPane sp = new JScrollPane(jta); // 文本域添加到滚动面板
		jp1.add(sp);
		container.add(jp1,BorderLayout.NORTH);
		
		
		container.add(jp2,BorderLayout.SOUTH);
		jp2 = jpadd(jp2, jc1, 1);
		jp2 = jpadd(jp2, jc2, 2);
		jp2 = jpadd(jp2, jc3, 3);
		setSize(300,200);
		setVisible(true);
		setTitle("复选框的使用");
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

	private JPanel jpadd(JPanel jp,JCheckBox jc,int num) {
		jp.add(jc);
		jc.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(jc.isSelected()){
					jta.append("复选框 "+num+" 被选中\\n");
				}
			}
		});
		return jp;
	}
	public static void main(String[] args) {
		new JCheckBoxTest();
	}
}

4.5 列表组件

4.5.1 JComboBox

package com.zyx.mySwing.myComponents.listComponents;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

/**
 * 下拉列表组件:下拉列表框是一个带条状的显示区,它具有下拉功能,在下拉列表框的右方存在一个倒三角形的按钮
 * 当用户单击该按钮时,下拉列表中的项目将会以列表形式显示出来。
 * public JComboBox()
 * public JComboBox(ComboBoxModel dataModel)
 * public JComboBox(Object[] arrayData)
 * public JComboBox(Vector vector)
 * 
 * 一般将下拉列表中的项目封装成ComboBoxModel的情况比较多。
 * ComboBoxModel为接口,它代表一般模型,可以自定义为一个类实现该接口:
 * 然后在初始化JComboBox对象时向上转型为ComBoxModel接口类型,但是必须实现以下两个方法:
 * 	public void setSelectedItem(Object item):用于设置下拉列表框中的选中项
 * 	public Object getSelectedItem():用于返回下拉列表框的选中项
 * 自定为一个类除了implement ComboBoxModel接口以外,还可以extends AbstractListModel类。
 * 该类有两个操作下拉列表的方法:
 * 	getSize():返回列表的长度
 * 	getElementAt(int index):返回指定索引处的值
 */
public class JComboBoxTest extends JFrame{
	
	class MyComboBox extends AbstractListModel<String> implements ComboBoxModel<String>{
		String selectedItem = null;
		String[] items = {"3","2","张三李四","张三李四"};
		@Override // 获取下拉列表框中的姓名
		public int getSize() {return items.length;}
		@Override // 根据索引返回值
		public String getElementAt(int index) {return items[index];}
		@Override // 设置下拉列表框被选中项目
		public void setSelectedItem(Object anItem) {selectedItem = (String)anItem;}
		@Override	// 获取下拉列表框中的项目
		public Object getSelectedItem() {return selectedItem;}
	}
	
	private JComboBox<String> jc = new JComboBox<>(new MyComboBox());// 这是JDK7的新特性
	private JLabel jl = new JLabel("选择正确选项");
	private JPanel jp = new JPanel();
	public JComboBoxTest() {
		Container container = getContentPane();// 创建容器
		setLayout(new FlowLayout());
		container.add(jl);
		container.add(jc);
		setSize(300,300);
		setVisible(true);
		setTitle("下拉框列表测试");
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new JComboBoxTest();
	}
}

4.5.2 JList

package com.zyx.mySwing.myComponents.listComponents;

import java.awt.Container;

import javax.swing.AbstractListModel;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;

/**
 * 列表框组件:
 * 列表框只是在窗体上占据固定的大小,如果需要列表框具有滚动效果,可以将列表框放入滚动面板中。
 * 
 * public void JList():无参构造列表框,通过在初始化列表框后使用setListData()方法对列表框进行设置;
 * public void JList(Object[] listData):以下三个有参构造方法对列表框项目进行设置。
 * public void JList(Vector listData)
 * public void JList(ListModel dataModel)
 * 
 * 使用数组作为初始化列表框的参数:
 * String[] items = {"A","B","C"};
 * JList jl = new JList(items);
 * 使用Vector类型作为初始化列表框的参数:
 * Vector items = new Vector();
 * JList jl = JList(items);
 * items.add("A");
 * items.add("B");
 * items.add("C");
 */
public class JListTest extends JFrame{
	public JListTest() {
		Container container = getContentPane();//创建容器
		container.setLayout(null);
		/**
		 * 以下是一种通过继承抽象类AbstractListModel实现的列表框模型
		 * JList<String> jl = new JList<String>(new ListModel());
		 */
		JList<String> jl = new JList<String>(new MyListModel()); // 此处用了JDK7的新特性
		JScrollPane jsp = new JScrollPane(jl); // 一个滚动面板中加入一个列表框
		jsp.setBounds(10, 10, 100, 100);// 设置滚动面板
		container.add(jsp); // 容器加入滚动面板
		/**
		 * 以下是一种通过DefaultListModel,由于其扩展了AbstractListModel。
		 * 设置完成后,其向上转型成ListModel接口,初始化列表框
		 * DefaultListModel可以通过addElement方法可以
		 */
		final String[] elements = {"a","b","c","项目1","项目二","项目三"};
		final DefaultListModel jlm = new DefaultListModel();
		final JList jl2 = new JList(jlm); // 创建一个列表框
		for(int i=0;i<elements.length;i++)
			jlm.addElement(elements[i]);
		JScrollPane jsp2 = new JScrollPane(jl2); // 一个滚动面板中加入一个列表框
		jsp2.setBounds(110, 10, 100, 100);// 设置滚动面板
		container.add(jsp2);
		
		setSize(300,300);
		setVisible(true);
		setTitle("测试列表框组件");
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	class MyListModel extends AbstractListModel<String>{ // 继承抽象类AbstractListModel
		private String[] items = {"项目1","项目二","项目三","a","b","c"};
		public int getSize() {return items.length;} // 重写getSize
		public String getElementAt(int x) { // 重写getElementAt
			if (x<items.length) { // 若索引位置不超过长度
				return items[x++]; // 返回索引位置值,然后索引+1
			}
			else {
				return null;
			}
			
		}
	}

	public static void main(String[] args) {
		new JListTest();
	}
}

4.6 文本组件

4.6.1 JTextField

package com.zyx.mySwing.myComponents.textComponents;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class JTextFieldTest extends JFrame{
	/**
	 * 文本框用来显示或编辑一个单行文本
	 * public JTextField()
	 * public JTextField(String text)
	 * public JTextField(int fieldwidth)
	 * public JTextField(String text,int fieldwidth)
	 * public JTextField(Document docModel,String text,int fieldwidth)
	 * 在初始化时,设置文本框的默认文字,文本框的长度等实现
	 */
	public JTextFieldTest() {
		final JTextField jtf = new JTextField("aaa",20);
		final JButton jb = new JButton("Clear");
		jtf.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jtf.setText("触发事件"); // 设置文本框的值
			}
		});
//		jtf.setSize(100,20);
		jb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				jtf.setText("");	// 将文本框置空
				jtf.requestFocus(); //焦点回到文本框
			}
		});
//		jb.setSize(100, 20);
		Container container = getContentPane();
		setLayout(new FlowLayout());
		container.add(jtf);
		container.add(jb);
		
		
		setSize(250,100);
		setVisible(true);
		setTitle("测试文本框JTextField");
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new JTextFieldTest();
	}
}

4.6.2 JPasswordField

/**
 * 密码框JPasswordField与文本框JTextField的定义与用法基本相同,唯一不同的是密码框将用户输入的字符串以某种符号进行加密
 * public JPasswordField()
 * public JPasswordField(String text)
 * public JPasswordField(int fieldwidth)
 * public JPasswordField(String text,int fieldwidth)
 * public JPasswordField(Document docModel,String text,int fieldwidth)
 * 在程序中定义密码框:
 * JPasswordField jpf = new JPasswordField();
 * jpf.setEchoChar("#"); // 设置回显字符
 */

4.6.3 JTextArea

package com.zyx.mySwing.myComponents.textComponents;

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class JTextAreaTest extends JFrame{

	private static final long serialVersionUID = 1L;
	public JTextAreaTest(){
		setSize(200,100);
		setTitle("定义自动换行的文本域");
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		Container cp=getContentPane();
		JTextArea jt=new JTextArea("文本域",6,6);
		jt.setLineWrap(true);//可以自动换行
		cp.add(jt);
		setVisible(true);
	}
	public static void main(String[] args) {
		new JTextAreaTest();
	}
}

以上是关于javax.swing的基本组成的主要内容,如果未能解决你的问题,请参考以下文章

javax.swing的基本组成

javax.swing的基本组成

14.4-全栈Java笔记: javax.swing常用控件有哪些?怎么用?

Eclipse 找不到 javax.swing

java:限制swing中的JTextField只能输入中文,字母,数字。

ClassCastException:javax.swing.plaf.FontUIResource 无法转换为 javax.swing.InputMap