第十五讲JavaGUI编程入门
主要内容
Java GUI窗口概述
用JFrame类创建窗口
最常用组件的创建和使用
(JLabel、JTextField、JTextArea、JScrollpane、JButton)
Java GUI窗口概述
一个最简单的Java GUI示例
import javax.swing.*;
public class FirstFrame {
public static void main( String[] args ) {
JFrame f = new JFrame();
f.setSize( 300, 200 );
f.setVisible(true);
}
}
问题:
²该窗口的关闭按钮不能结束程序
²窗口无标题
²窗口中没有内容
窗口的界面元素
标签、文本框、按钮、复选框、菜单……
²类创建对象(java.awt,javax.swing)
²对象放置于窗口
²窗口布局
java.awt和javax.swing
创建GUI Application和Applet的必备软件包。
两者中均有一套界面元素组件。风格稍有不同,如:
软件包中还含有布局管理、事件处理的类和接口。
Java屏幕坐标
假如显示器分辩率为1024*768,则屏幕坐标系如下:
(0,0)(1024,0)
屏幕
(0,768)(1024,768)
JFrame类创建窗口
Frame、JFrame可为应用程序构建主框架。几乎所有的GUI应用程序都在主框架中进行。由继承可见,Frame、JFrame是具有Windows窗口特征的容器组件。
JFrame类的层次结构
由此可见,JFrame类继承了Frame
Component:抽象类,归纳了所有图形用户界面上的组件。
Containter:容器也是组件,特别的是容器中可以容放组件。
构造方法
public JFrame():创建一个简单的窗口,默认不可见。
public JFrame(String Title):创建一个带有标题的窗口。窗口标题置为Title,默认不可见。
JFrame的设置和显示方法
public void setBound(int x,int y,int w,int h)
设置窗口左上角位置和窗口大小
public void setVisible(boolean b)显示、隐藏窗口
public void setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
设定窗口响应用户的关闭操作
public void setTitle(String title)设置窗口标题
练习:设计一个可关闭的、确定尺寸的、确定显示位置的、有标题的窗口,如图。
import javax.swing.*;
public class SimpleFrame extends JFrame {
SimpleFrame(){
}
public static void main( String[] args ) {
new SimpleFrame();
}
}
思考
1.如果一个类继承JFrame类,由该类创建的对象是?
2.如何让一个窗口可见?
3.如何设置可关闭的窗口?
4.窗口标题有哪些方法设置?
5.如何设置窗口的大小?
6.JFrame在哪个软件包中?
在JFrame窗口中加入组件
组件不能直接放置到JFrame窗口,要先获取窗口的包容器,再布局,然后将组件加入到容器中。
获取窗口的包容器
public Container getContentPane()
如:
JFrame f=JFrame();
Container c=f.getContentPane();
c.setLayout(new FlowLayout());//进行顺序排放组件的设置
说明:
1、Container类在java.awt包中。
2、默认的布局是叠放形式。(叠放和其它布局以后讨论)
将组件加入到窗口
public void add(Component comp)
如:
c.add(new Button(“Count”));
c.add(new JLabel(“Try”));
调整和设置窗口
public void pack()根据组件调整窗口到适当大小
public void setLocation(int x,int y)窗口左上角设置
public void setResizable(boolean)允许或禁止缩放
public void setSize(int w,int h)窗口大小设置
练习:修改上面的SimpleFrame.java,在窗口中加入一个标签和按钮。
最常用组件的创建和使用
标签(JLabel)
用来显示文字,图标(可以文字与图标同时显示)。
JLabel构造方法
JLabel()创建一个空标签
JLabel(String c)指定标签文本
常用设置方法
设置标签显示文本:public void setText(String c)
取得标签显示文本:public StringgetText()
字体设置:public voidsetFont(Font f)
前景色设置:public void setForeground(Color c)
一个简单的标签示例
单行文本框(JTextField)
构造方法
JTextField()
JTextField(int columns)指定宽度
JTextField(Stringtext, int columns)
常用方法
设置标签显示文本:public void setText(String c)
取得标签显示文本:public StringgetText()
字体设置:public voidsetFont(Font f)
前景色设置:public void setForeground(Color c)
一个单行文本框示例
多行文本框(JTextArea)
构造方法
JTextArea()
JTextArea(int rows,columns)指定尺寸
JTextArea(Stringtext,int rows, int columns)
常用设置方法
public void setLineWrap(boolean wrap):换行状态设置
public void setRows(int rows):设置行数
public void setColumns(int columns):设置列数
说明:颜色、字体、内容的设置同上(setForeground、setFont、setText)
滚动面板JScrollPane
将多行文本框置入滚动面板,就可以生成立体感的文本框。
JScrollPane是一个嵌有滚动条的面板。
JScrollPane将滚动条和滚动条所服务的组件组合在了一起。
构造方法
public JScrollPane(view v)
可用add方法,将滚动面板加入到容器,由此加入到窗口中。
练习:设计并显示如下窗口,在多行文本框中显示“read.txt”的内容。
import java.awt.*;
import javax.swing.*;
import java.io.*;
class ReadFile extends JFrame{
JTextArea t=new JTextArea(12,40);
ReadFile(){
this.setBounds(300,300,500,300);
this.setVisible(true);
}
static String getFileText(){
}
public static void main(String[] args){
new ReadFile();
}
}
按钮(JButton)
用户可通过按钮发布命令。
按钮的创建
构造方法:
JButton()
JButton(String c)指定显示文本
JButton(Icon image)指定显示图标
JButton(String c ,Icon image)
练习:设计容放了三种不同风格按钮的窗口,如图所示。
import java.awt.*;
import javax.swing.*;
public class JButtonTest extends JFrame{
JButton b1,b2,b3;
JButtonTest(){
super("JButton Test");
setDefaultCloseOperation(this.EXIT_ON_CLOSE);Container cc = getContentPane();
cc.setLayout(new FlowLayout());
buttonInit();
cc.add(b1);
cc.add(b2);
cc.add(b3);
this.setBounds(300, 200,350, 200);
setVisible(true);
}
void buttonInit(){
b1=new JButton("Text Button");
b2=new JButton(new ImageIcon("logo.gif"));
b3=new JButton("Java logo",new ImageIcon("logo.gif"));
}
public static void main(String args[]) throws Exception{
newJButtonTest();
}
}
练习:设计如下界面的窗口
思考
1.可在JFrame界面上直接add组件吗?
2.在JFrame界面上放置组件的步骤?
3.add是哪个类的方法?
4.如何设置容器的布局?
5.如何创建一个指定文本的标签?
6.如何创建单行文本框?
7.如何创建多行文本框?
8.怎样将多行文本框包装上滚动条?
9.怎样对多行文本框中的文本设置成自动换行?
10.如何创建指定文字的按钮?
11.如何生成一个颜色对象,并设置常用组件的前景色?
12.如何生成一个字体对象,并设置常用组件的字体?