1.1常用面板
1.1.1 JPanel面板可以聚集一些组件来布局,面板也是一种容器
//以下
package 拍;
import javax.swing.*;
import java.awt.*;
import java.net.PortUnreachableException;
import java.util.jar.JarFile;
public class JPaneTest extends JFrame {
public JPaneTest(){
Container c=getContentPane();
//将整个容器初始化为2行1列的网格布局
c.setLayout(new GridLayout(2,1,10,10));
JPanel p1=new JPanel(new GridLayout(1,3,10,10));
JPanel p2=new JPanel(new GridLayout(1,2,10,10));
JPanel p3=new JPanel(new GridLayout(1,2,10,10));
JPanel p4=new JPanel(new GridLayout(2,1,10,10));
for (int i=0;i<3;i++){
p1.add(new JButton("i"));
}
for(int i=3;i<5;i++){
p2.add(new JButton("i"));
}
for(int i=5;i<7;i++){
p3.add(new JButton("i"));
}
for (int i=7;i<9;i++){
p4.add(new JButton("i"));
}
c.add(p1);
c.add(p2);
c.add(p3);
c.add(p4);
setSize(350,200);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new JPaneTest();
}
}
1.1.2 JScrollpane面板
//在设置界面时,当遇到在一个较小的容器窗体中显示一个较大部分的内容时,用此面板,它带有滚动条,且只能放置一个组件不可以使用页面布局管理器;若在此面板中放置多个组件,需要将多个组件放置在JPanel面板上,然后将JPanel面板作为一个整体组件添加在JScrollPane组件上
package 拍;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowStateListener;
public class JScrollPaneTest extends JFrame {
public JScrollPaneTest(){
Container c=getContentPane();
JTextArea ta=new JTextArea(20,50); //创建文本区域组件
JScrollPane sp=new JScrollPane(ta); //创建JScrollPane面板对象
c.add(sp);
setTitle("带滚动条的文字编辑器");
setSize(200,200);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new JScrollPaneTest();
}
}
1.2按钮组件
1.2.1提交按钮组件
//Java中提供多种按钮,这些按钮都是从AbstractButton中继承而来的
//Swing中提交按钮(JButton)由JBtton对象表示,构造方法有以下几种形式:
public JButton()
public JButton(String text)
public JButton(Icon icon)
public JButton(String text,Icon icon)
//上述几种方法可以对按钮进行带文字和图片操作
//以下实例,创建按钮组件,并为按钮设置图标,添加动作监视器
package 拍;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
public class JButtonTest extends JFrame {
public JButtonTest(){
URL url=MyImageIcon.class.getResource("JFrame.png");
Icon icon=new ImageIcon(url);
setLayout(new GridLayout(3,2,5,5)); //设置网格布局管理器
Container c=getContentPane(); //创建容器
for (int i=0;i<5;i++){
//创建按钮,同时为按钮设置文字和图标
JButton j=new JButton("button"+i,icon);
c.add(j);
if(i%2==0){
j.setEnabled(false); //设置一些按钮可不用
}
}
JButton jb=new JButton(); //实例化一个没有文字与图片的按钮
jb.setMaximumSize(new Dimension(90,30)); //设置按钮与图片相同大小
jb.setIcon(icon); //为按钮设置图标
jb.setHideActionText(true);
jb.setToolTipText("图片按钮"); //设置按钮提示为文字
jb.setBorderPainted(false); //设置按钮边界不显示
jb.addActionListener(new ActionListener() { //为按钮添加监听事件
@Override
public void actionPerformed(ActionEvent actionEvent) {
//弹出确认对话
JOptionPane.showMessageDialog(null,"弹出对话框");
}
});
c.add(jb); //将按钮添加到容器中
setTitle("创建带文字与图片的按钮");
setSize(200,200);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new JButtonTest();
}
}
//本实例中使用了俩种方法创建按钮,第一种实在初始化的时候赋予按钮图标和文字,另一种是首先创建一个没有图标和文字的按钮,然后使用setIcon()方法为这个按钮定制一个图标
1.2.2单选按钮组件
//默认情况下,单选按钮组件是一个圆形图标
//单选按钮
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)
1.2.3按钮组
//在应用程序窗体中定义一个单选按钮组
JRadioButton jr1=new JRadioButton();
JRadioButton jr2=new JRadioButton();
JRadioButton jr3=new JRadioButton();
ButtonGroup group=new ButtonGroup();
group.add(jr1);
group.add(jr2);
group.add(jr3);
//单选按钮与提交按钮的用法基本相似,只是实例化单选按钮对象后需要将其添加至按钮组件中
1.2.3复选框按钮
//复选框在具有一个方块图标,外加一段描述性文字,每个复选框都提供“选中”和“不选中”俩种状态;构造方法如下:
public JCheckBox()
public JCheckBox(Icon icon,boolean checked)
public JCheckBox(String text,boolean checked)
package 拍;
import javafx.css.converter.LadderConverter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CheckBoxTest extends JFrame {
public CheckBoxTest(){
setTitle("这是复选框的按钮组件");
JTextArea jt=new JTextArea();
JPanel jp1=new JPanel(new BorderLayout());
JPanel jp2=new JPanel(new BorderLayout());
JCheckBox jc1=new JCheckBox("1",true);
JCheckBox jc2=new JCheckBox("2",false);
JCheckBox jc3=new JCheckBox("3",true);
Container c=getContentPane();
c.setLayout(new BorderLayout());
final JScrollPane scrollPane=new JScrollPane(jt);
c.add(jp1,BorderLayout.NORTH);
jp1.add(scrollPane);
c.add(jp2,BorderLayout.SOUTH);
jp2.add(jc1);
jc1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
jt.append("复选框1被选中\n");
}
});
jp2.add(jc2);
jc2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
jt.append("复选框2被选中\n");
}
});
jp2.add(jc3);
jc3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
jt.append("复选框3被选中");
}
});
}
public static void main(String args[]){
new CheckBoxTest();
}
}
1.3列表组件
//Swing中提供俩种列表组件,分别表示为下拉列表框与列表框
1.3.1下拉列表框组件
1、JComboBox类
//常用的构造方法如下:
public JComboBox()
public JComboBox(ComboBoxModel dataModel)
public JComboBox(Object arrayData[])
public JComboBox((Vector vector)
2、JComboBox模型
ComboBox为接口,他代表一般模型,可以自定义一个类实现该接口,然后在初始化JComboBox对象时向上转型为ComboBoxModel接口类型,但必须要实现一下俩种方法
public void setSelectedItem(Object item)
public Object getSelectedItem()
//其中setSelectedItem()方法用来设置下拉表框中的选中项,getSelectedItem()用于返回下拉表框中选中项
getSize(); //返回列表长度
getElementAt(int index); //返回指定索引处得值
1.3.2列表框组件
//当激活下拉列表框时,还会出现列表框中的内容,但是列表框只是在窗体上占据固定的大小,如果要使列表框具有滚动效果,可以将列表框放入滚动面板中
Swing中常使用JList类·对象来表示列表框,常用构造方法如下:
public void JList()
public void JList(Object ListData[])
public void JList(Vector ListData)
public void JList(ListModel dataModel)
//对于无参数构造方法,可以使用数组、Vector类型、ListModel模型进行初始化设置,使用数组初始化如下:
String contents[]={"列表一","列表二","列表三"}
JList jl=new JList(contents)
//Vector类型初始化如下:
Vector contents=new Vector()
JList jl=new JList(contents)
contents.add("列表一")
contents.add("列表二")
contents.add("列表三")
package 拍;
import javax.swing.*;
import java.awt.*;
public class JListTest extends JFrame {
public JListTest(){
Container c=getContentPane();
c.setLayout(null);
JList<String> jl=new JList<>(new MyListModel()); //此处应用了JDK7的新性质
JScrollPane js=new JScrollPane(jl);
js.setBounds(10,10,100,100);
c.add(js);
setSize(500,400);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new JListTest();
}
}
class MyListModel extends AbstractListModel<String>{ //继承抽象类
//设置列表框内容
private String contents[]={"列表一","列表二","列表三"};
public String getElementAt(int x){ //重写getElementAt()方法
if (x<contents.length)
return contents[x++];
else
return null;
}
public int getSize(){ //重写getSize方法
return contents.length;
}
}
1.4文本组件
1.4.1文本框组件
//文本框用来显示或是编辑单行文本,常用的构造方法如下:
public JTextField()
public JTextField(String text)
public JTextField(int fieldwidth)
public JTextField(String text,int fieldwidth)
public JTextField(Document docModel,String text,int fieldWidth)
1.4.2密码框组件
//密码框与其不同的是将输入的字符进行加密
JPasswordField jp=new JPasswordField()
jp.setEchoChar("#") //设置回显字符
1.4.3文本域组件
//构造方法如下:
public JTextArea()
public JTextArea(String text)
public JTextArea(int rows,int columns)
public JTextArea(Document doc)
public JTextArea(Document doc,String text,int rows,int columns)
package 拍;
import javax.swing.*;
import java.awt.*;
public class JTextAreaTest extends JFrame {
public JTextAreaTest(){
setTitle("定义自动换行的文本域");
Container c=getContentPane();
JTextArea jt=new JTextArea("文本域",6,6);
jt.setLineWrap(true); //可以自动换行
c.add(jt);
setSize(500,400);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new JTextAreaTest();
}
}
1.5常用事件监听器
//常用的事件监听器由动作事件监听器和焦点事件监听器
//Swing事件监听由三个分离的对象王成对事件的处理,分别为事件源、事件、以及监听程序。事件源触发一个事件,它被多个或是一个"监听器"接收,监听器负责处理事件
//事件源会在会在用户做出相应的动作产生事件对象,编写一个监听器类必须实现相应的接口,获取某个事件对象就必须获得相应的接口。所有的事件源都具有addXXXLisener()和removeXXXLisener()方法,其中XXX表示监听事件类型
package 拍;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SimpleEvent extends JFrame {
private JButton jb=new JButton("我是按钮,点击我");
public SimpleEvent(){
setTitle("单击事件按钮");
setLayout(null);
Container c=getContentPane();
jb.setBounds(10,10,100,30);
c.add(jb);
setSize(400,500);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//为按钮实现一个ActionListener接口
jb.addActionListener(new jbAction());
}
//定义内部类实现ActionListener接口
class jbAction implements ActionListener{
//重写actionPerformed()方法
public void actionPerformed(ActionEvent arg0){
jb.setText("我被单击了");
}
}
public static void main(String args[]){
new SimpleEvent();
}
}
//若要在定义一个按钮,并未该按钮设置一个事件,使用内部类的方式来解决这个问题。
1.6焦点监听器
//当光标离开或是返回该文本框时显示一个文本框
package 拍;
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
public class FocusEventTest extends JFrame {
public FocusEventTest(){
setTitle("焦点事件监听器");
setLayout(null);
Container c=getContentPane();
JTextField jt1=new JTextField("请点击其它文本",10);
JTextField jt2=new JTextField("请点击我",10);
c.add(jt1);
c.add(jt2);
setSize(500,400);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jt1.addFocusListener(new FocusListener() {
//事件获取焦点调用的方法
@Override
public void focusGained(FocusEvent focusEvent) {
}
//事件失去焦点调用的方法
@Override
public void focusLost(FocusEvent focusEvent) {
JOptionPane.showMessageDialog(null,"文本框失去焦点");
}
});
}
public static void main(String args[]){
new FocusEventTest();
}
}