初学java(5)

十、Swing程序设计

/*AWT抽象窗口工具箱

  • Swing是AWT组件的增强组件,但并不能完全替代AWT组件,这两种组件需要同时出现在一个图形用户界面中
    *Swing组件允许编程人员在跨平台时指定统一的外观和风格
    *Swing通常被称为“轻量级组件”,因为他完全有java编写,而java是不依赖于操作系统的语言,他可以在任何
    *平台上运行,相反,依赖于本地平台的组件被称为“重量级组件”,如AWT组件就是依赖本地平台的窗口系统来
    *决定组件的功能、外观和风格
    *Swing特点:
    *轻量级组件
    *可插入外观

*Swing包
*在Swing组件中大多数GUI组件都是Component类的直接子类或间接子类,JComponent类是Swing组件各种特
*性的存放位置,这些组件的特性包括设定组件边界、GUI组件自动滚动等
*
*窗体作为Swing应用程序中组件的承载体,很重要
*Swing中常用的窗体包括JFrame和JDialog

*JFrame窗体:
*是一个容器,里面需要加入组件,也可以加入菜单,可以在上面绘图
是一个框架,是独立于浏览器的可独立运行的主窗口,
*通常用于开发桌面应用程序,Frame拥有边界和标题栏设置,大小、内容可以调整
Frame() 创建一个没有窗口标题的窗口框架
Frame(String) 创建一个指定窗口标题的窗口框架
该容器的缺省布局是BorderLayout
JFrame() 创建一个没有窗口标题的窗口框架,即无参的构造方法,可以创建一个初始不可
见、没有标题的窗体
JFrame(String) 创建一个指定窗口标题的窗口框架,即有参的构造方法,可以创建一个不可见
但具有标题的窗体,
通常使用setVisible(true)方法使窗体可见,同时可使用setSize(int x,int y)方法设置窗体大小,
x为宽y为高,创建窗体后,需要给予窗体一个关闭的方式。可以调用setDefaultCloseOperation()
方法关闭窗体,其中四种最为常用:
DO_NOTHING_ON_CLOSE 代表什么都不做就将窗体关闭
DISPOSE_ON_CLOSE 代表任何注册监听程序对象后会自动隐藏并释放窗体
HIDE_ON_CLOSE 表示隐藏窗口的默认窗口关闭
EXIT_ON_CLOSE 表示退出应用程序默认窗口关闭

*开发过程中可以通过继承java.swing.JFrame类创建一个窗体,该窗体拥有“最大化,最小化,关闭”等按钮
*JFrame jf = new JFrame(title);
*Container container = jf.getContentPane();
*jf:JFrame类的对象
*container:Container类的对象,可以使JFrame对象调用getContentPane()方法,获取
*getContentPane()方法将窗体转换为容器 可在其中添加组件或设置布局管理器
*如需将组件添加至容器,可用Container类的add()方法进行设置
*container.add(new JButton(“按钮”)); //JButton按钮组件
*可用Container类的remove()方法进行删除
*container.remove(new JButton(“按钮”)); //JButton按钮组件

JDialog 窗体:
是Swing组件中的对话框,继承AWT组件中的java.awt.Dialog类
功能是从一个窗体中弹出另一个窗体,与JFrame窗体类似,在使用时也需调用getContentPane()方法,获取
*getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的特性

*标签 (Lable、JLable)
*Lable(): 用来创建一个没有显示内容的标签
*Lable(String str):创建一个带初始字符串的标签
*Lable(String str,int alignment):创建一个带初始字符串及指定对齐方式的标签
*void setAlignment(int alignment):设置标签对齐方式
*参数int 代表的三种对齐方式:

  • 0 = Lable.LEFT(左对齐) 1 = Lable.CENTER(居中对齐) 2 = Lable.RIGHT(右对齐)

JLable的新增功能
可以提供带图标的标签,图标和文字的位置是可以控制的
*
import javax.swing.
;
import java.awt.
;
public class Swing程序设计
{
public static void main(String[] args)
{
JFrame jfr = new JFrame(“GUI组件使用的示例”);
jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfr.setLayout(new FlowLayout());
//添加标签
//JLabel jlb = new JLabel(“我是标签,我不生产事件”);
JLabel jlb = new JLabel();
jlb.setText(“我是标签,我不生产事件”);
jfr.add(jlb);
jfr.setSize(400, 200);
jfr.setVisible(true);
}
}

import java.awt.;
import javax.swing.
;

public class Swing程序设计 extends JFrame {

public void CreateJFrame(String title)
{
JFrame jf = new JFrame(title);
Container container = jf.getContentPane();
JLabel jl = new JLabel(“这是一个JFrame窗体”);
//使标签上的文字居中
jl.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jl);//将标签添加到容器中
container.setBackground(Color.white);//设置容器的背景颜色
jf.setVisible(true);//使窗体可视
jf.setSize(400, 200);//设置窗体大小
//设置窗体关闭方式
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
//在主方法中调用CreateJFrame()方法
new Swing程序设计().CreateJFrame(“创建一个JFrame窗体”);
}

}

*面板容器:(Panel、JPanel)
*Panel属于无边框容器,无边框容器包括Panel和Applet,其中Panel是Container的子类,Applet是Panel的子类
*Panel(JPanel)是一种最简单的容器类,他提供空间将其他的组件附在其上
*可以在一个Panel(JPanel)上放入其他Panel(JPanel)
*一个Frame(JFrame)里面可放入其他好几个Panel(JPanel),Panel(JPanel)的好就是可以将相关的组件整合
*组织起来,让用户接口更为简洁清楚
*
*JScrollPane面板
*当遇到在一个较小的容器窗体中显示一个较大部分的内容的情况,这时可以使用JScrollPane面板,JScrollPane面板是带滚动条的面板
*但JScrollPane面板只能放一个组件,并且不可使用布局管理器,如需要在JScrollPane面板中放置多个组件,需将多个组件放置在JPanel
面板上,然后将JPanel面板作为一个整体组件添加在JScrollPane组件上
import java.awt.;
import javax.swing.
;
public class 组件2 extends JFrame{
public 组件2() {
Container c = getContentPane(); //创建容器
JTextArea ta = new JTextArea(20,50);//设置文本区域组件
JScrollPane sp = new JScrollPane(ta);
c.add(sp);
setTitle(“带滚动条的文字编译器”);
setSize(200,200);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

}
public static void main(String[] args)
{
new 组件2();
}
}

文本框(TextField、JTextField、JPasswordField)
密码框组件:JPasswordField类是继承JTextField类而来,是一个专门用来输入“密码”
的单行文本框,即对用户输入的字符采用密文的形式进行显示,如“****”

文本域:(其中的两个类:TextArea,JTextArea)
文本域允许用户编辑具有多行的文本,可以用于输出信息,也可以用于接收信息
在程序中接收用户的多行文字输入

TextEvent事件(“文本改变”时触发)
TextArea的内容布满时会产生滚动条
而当JTextArea的内容布满时不会产生滚动条,而是自动加大文本区的大小

import java.awt.;
import javax.swing.
;
public class 组件2 extends JFrame{
public 组件2() {
setSize(200,100);
setTitle(“定义自动换行的文本域”);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
Container cp = getContentPane();
JTextArea jt = new JTextArea(“文本域”,15,15);
jt.setLineWrap(true);//可自动换行
cp.add(jt);
setVisible(true);
}
public static void main(String[] args)
{
new 组件2();
}
}

按钮:(Button、JButton)
ActionEvent事件(通过按下该按钮触发…0)
JButton新增功能:可以提供带图标的按钮

/标签、文本框、文本域、按钮 综合练习
import java.awt.
;
import javax.swing.*;
public class Swing程序设计 extends JFrame
{
JLabel jlb = new JLabel(“组件的综合应用”);
JButton jbt = new JButton(“确定”);
JTextField jtf = new JTextField(20);
JTextArea jta = new JTextArea(10,20);
public Swing程序设计()
{
super(“综合应用实例1”);
Container ct = getContentPane();
ct.setLayout(new FlowLayout());//内容面板
//添加四个组件
ct.add(jlb);
ct.add(jta);
ct.add(jbt);
ct.add(jtf);
//为了能使关闭按钮好使
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置大小
setSize(400,300);
//使容器可见
setVisible(true);
}
public static void main(String[] args)
{
new Swing程序设计();
}
}
*/

/import java.awt.;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
class mmmm extends JDialog{//创建新类继承JDialog
public mmmm(JFrame swing程序设计)
{
//实例化一个JDialog类对象,指定对话框的父窗体、窗体标题、类型
super(swing程序设计,“第一个JDialog窗体”,true);
Container container = getContentPane(); //创建一个容器
container.add(new JLabel(“这是一个对话框”)); //在容器中添加标签
setBounds(120,120,100,100);//设置对话框窗体的大小
}

}
public class Swing程序设计 extends JFrame
{
public static void main(String args[])
{
new Swing程序设计();
}
public Swing程序设计() {
Container container = getContentPane();
container.setLayout(null);
JLabel jl = new JLabel (“这是一个JFrame窗体”);
//将标签的文字置于标签中间位置
jl.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jl);
JButton bl = new JButton(“弹出对话框”);
bl.setBounds(10,10,100,21);
bl.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//使Swing程序设计窗体可见
new mmmm(Swing程序设计.this).setVisible(true);
}
});
container.add(bl);
//SomeSentence
}
}*/
/*复选框(Checkbox、JCheckBox)

  • 功能:用来“获得输入”的组件,他拥有“状态”的特性,可以通过鼠标单击复选框的操作来设置其状态为“选中”或“非选中”,
  • 可以让用户做出多项选择
  • ItemEvent事件(“复选框状态发生改变”时触发)
  • JCheckBox 的新增功能
  • 可以提供带图标的复选框
  • 单选框(CheckboxGroup、JRadioButton、ButtonGroup)
  • 在AWT中通过复选框组CheckboxGroup来实现单选框的功能,而在Swing中则通过JRadioButton来实现
  • CheckboxGroup:
  • 构造方法:public CheckboxGroup()
  • 常用成员方法:public Checkbox getSelectedCheckbox() 从此复选框中获取当前选择
  • 特点:CheckBoxGroup是Object的直接子类;CheckboxGroup的对象不产生事件
  • 结合CheckboxGroup与CheckBox实现单选功能
  • 1.CheckboxGroup()方法构造一个CheckboxGroup对象
  • 2.Checkbox(String,CheckboxGroup,boolean)方法创建Checkbox对象,同一组的Checkbox的CheckboxGroup参数值相同
  • JRadioButton 创建单选按钮
  • ButtonGroup 单选按钮
  • 下拉列表(Choice、JComboBox)实现一个下拉式列表,支持单选
  • 列表框组件
  • 设置的方式有3 种,包括数组、Vector类型和ListModel模型
  • 数组:String[] contents = {“列表1”,“列表2”,“列表3”};
  • JList jl = new JList(contents);
  • Vector类型的数据作为初始化JList组件的参数
  • Vector contents = new Vector();
  • JList jl = new JList(contents);
  • contents.add(“列表1”);
  • contents.add(“列表2”);
  • contents.add(“列表3”);
  • contents.add(“列表4”);
  • ListModel模型为参数
  • 需要创建ListModel对象,ListModel是Swing包中的一个接口,他提供了获取列表框属性的方法,但通常情况下为了使用户
  • 不完全实现ListModel接口中的方法,通常自定义一个类继承实现该接口的抽象类AbstractListModel

import java.awt.*;

import javax.swing.JFrame;
//import javax.swing.*;
public class Swing程序设计 extends Frame
{
Label label,labname,choiceLabel,checkboxLabel,radiobuttonLabel,gao;
TextField txtname;
TextArea result;
Choice choice;
Checkbox cb1,cb2,cb3,cb4,cb41,cb5,cb6,cb7,cb8;
CheckboxGroup checkboxg,checkboxg1;
Button btnok;
Panel panel1,panel2,panel3,panel4,panel5;
Font newFont1,newFont2,newFont3,newFont4;

//构造方法
public Swing程序设计(){
setTitle(“各种图形界面组件使用示例”);
setLayout(new GridLayout(5,1));
newFont1 = new Font(“宋体”,Font.BOLD,26);
newFont2 = new Font(“幼圆”,Font.ITALIC,20);
newFont3 = new Font(“黑体”,Font.BOLD,30);
newFont4 = new Font(“隶书”,Font.PLAIN,40);

//创建面板对象
panel1 = new Panel();
panel2 = new Panel();
panel3 = new Panel();
panel4 = new Panel();
panel5 = new Panel();

//创建标签对象
label = new Label(“调查报告”);
label.setFont(newFont4);
label.setForeground(Color.RED);
panel1.add(label);

choiceLabel = new Label(“性别”);
choiceLabel.setFont(newFont1);
choiceLabel.setForeground(Color.BLUE);
labname = new Label(“姓名”);
txtname = new TextField(15);
//下拉
choice = new Choice();
choice.addItem(“男”);
choice.addItem(“女”);
choice.addItem(“保密”);
panel2.add(labname);
panel2.add(txtname);
panel2.add(choiceLabel);
panel2.add(choice);

choiceLabel = new Label(“爱好”);
choiceLabel.setFont(newFont2);
choiceLabel.setForeground(Color.BLUE);
cb1 = new Checkbox(“读书”,false);
cb2 = new Checkbox(“运动”,false);
cb3 = new Checkbox(“旅游”,false);
cb4 = new Checkbox(“计算机”,false);
cb41 = new Checkbox(“游戏”,true);//默认被选中的
panel3.add(cb1);
panel3.add(cb2);
panel3.add(cb3);
panel3.add(cb4);
panel3.add(cb41);

radiobuttonLabel = new Label(“低年级”);
radiobuttonLabel.setFont(newFont3);
radiobuttonLabel.setForeground(Color.GREEN);
gao = new Label(“高年级”);
gao.setFont(newFont3);
gao.setForeground(Color.GREEN);
checkboxg = new CheckboxGroup();
cb5 = new Checkbox(“大一”,true,checkboxg); //单选框选项1,所属组checkboxg
cb6 = new Checkbox(“大二”,false,checkboxg); //单选框选项2,所属组checkboxg
checkboxg1 = new CheckboxGroup();
cb7 = new Checkbox(“大三”,false,checkboxg1); //单选框选项3,所属组checkboxg
cb8 = new Checkbox(“大四”,false,checkboxg1); //单选框选项4,所属组checkboxg
panel4.add(radiobuttonLabel);
panel4.add(cb5);
panel4.add(cb6);
panel4.add(gao);
panel4.add(cb7);
panel4.add(cb8);

result = new TextArea(3,50);
result.setForeground(new Color(255,120,0));
panel3.add(result);
btnok = new Button(“确定提交”);
panel5.add(btnok);

add(panel1);
add(panel2);
add(panel4);
add(panel3);
add(panel5);
setSize(500,500); //设置Frame的宽高
setVisible(true);//使Frame变为可见
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
private void setDefaultCloseOperation(int exitOnClose) {
// TODO Auto-generated method stub

}
//主方法
public static void main(String[] args)
{
new Swing程序设计();
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值