Java第十二章Swing二

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();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值