javax.swing的基本组成
Posted 从零开始的智障生活
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javax.swing的基本组成相关的知识,希望对你有一定的参考价值。
目录
二、基本布局
一、基本容器
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的基本组成的主要内容,如果未能解决你的问题,请参考以下文章
14.4-全栈Java笔记: javax.swing常用控件有哪些?怎么用?
java:限制swing中的JTextField只能输入中文,字母,数字。
ClassCastException:javax.swing.plaf.FontUIResource 无法转换为 javax.swing.InputMap