04747_Java语言程序设计(一)_第5章_图形界面设计(一)
例5.1一个用JFrame类创建窗口的Java应用程序。
import javax.swing.*; public class Example5_1 {
public static void main(String[] args) {
JFrame mw = new JFrame("我的第一个窗口");// 创建一个窗口容器对象。
mw.setSize(250, 200);// 设定窗口的宽和窗口的高,单位是像素
JButton button = new JButton("我是一个按钮");
mw.getContentPane().add(button);/* 获得窗口的内容面板,并将按钮添加在这个内容面板中 */
mw.setVisible(true);
}
}
例5.2定义JFrame派生的子类MyWindowDemo创建JFrame窗口。类MyWindowDemo的构造方法有五个参数:窗口的标题名,加入窗口的组件,窗口的背景颜色以及窗口的高度和宽度。在主方法中,利用类MyWindowDemo创建两个类似的窗口。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; public class Example5_2 {
public static MyWindowDemo mw1;
public static MyWindowDemo mw2; public static void main(String[] args) {
JButton butt1 = new JButton("我是一个按钮");
String name1 = "我的第一个窗口";
String name2 = "我的第二个窗口";
mw1 = new MyWindowDemo(name1, butt1, Color.blue, 350, 450);
mw1.setVisible(true);
JButton butt2 = new JButton("我是另一个按钮");
mw2 = new MyWindowDemo(name2, butt2, Color.magenta, 300, 400);
mw2.setVisible(true);
}
} class MyWindowDemo extends JFrame {
public MyWindowDemo(String name, JButton button, Color c, int w, int h) {
super();
setTitle(name);
setSize(w, h);
Container contentPane = getContentPane();// 获得窗口内容面板
contentPane.add(button);// 将按钮添加在内容面板中
contentPane.setBackground(c);// 设置背景颜色
}
}
例5.3处理按钮事件实例。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; public class Example5_3 {
public static void main(String[] args) {
ButtonDemo myButtonGUI = new ButtonDemo();// 声明并创建按钮对象
myButtonGUI.setVisible(true);
}
} class ButtonDemo extends JFrame implements ActionListener {
public static final int Width = 250;
public static final int Height = 200; ButtonDemo() {
setSize(Width, Height);
setTitle("按钮事件样例");
Container conPane = getContentPane();
conPane.setBackground(Color.BLUE);
conPane.setLayout(new FlowLayout());// 采用FlowLayout布局
JButton redBut = new JButton("Red");
redBut.addActionListener(this);// 给Red按钮注册监视器
conPane.add(redBut);// 在窗口添加Red按钮
JButton greenBut = new JButton("Green");
greenBut.addActionListener(this);// 给Green按钮注册监视器
conPane.add(greenBut);// 在窗口添加Green按钮
} public void actionPerformed(ActionEvent e)// 实现接口处理事件的方法
{
Container conPane = getContentPane();
if (e.getActionCommand().equals("Red"))// 是Red按钮事件
{
conPane.setBackground(Color.RED);
} else if (e.getActionCommand().equals("Green"))// 是Green按钮事件
{
conPane.setBackground(Color.GREEN);
} else { }
}
}
例5.4小应用程序有两个JPanel子类对象和一个按钮。
import java.applet.*;
import javax.swing.*; class MyPanel extends JPanel {
JButton button1, button2;
JLabel label; MyPanel(String s1, String s2, String s3)// Panel对象被初始化为有两个按钮和一个文本框。
{
button1 = new JButton(s1);
button2 = new JButton(s2);
label = new JLabel(s3);
add(button1);
add(button2);
add(label);
}
} public class Example5_4 extends Applet {
MyPanel panel1, panel2;
JButton button; public void init() {
panel1 = new MyPanel("确定", "取消", "标签,我们在面板1中");
panel2 = new MyPanel("确定", "取消", "标签,我们在面板2中");
button = new JButton("我不是在面板中的按钮");
add(panel1);
add(panel2);
add(button);
setSize(300, 200);
}
}
例5.5应用程序设有五个标签、分别放于窗口的东、西、南、北和中五个区域。
import javax.swing.*;
import java.awt.*; public class Example5_5 {
public static void main(String args[]) {
JLabel label1, label2, label3, label4, label5;
JFrame mw = new JFrame("我是一个窗口");
mw.setSize(250, 200);
Container con = mw.getContentPane();
con.setLayout(new BorderLayout());
label1 = new JLabel("东标签");
label2 = new JLabel("南标签", JLabel.CENTER);
label3 = new JLabel("西标签");
label4 = new JLabel("北标签", JLabel.CENTER);
label5 = new JLabel("中标签", JLabel.CENTER);
con.add(label1, "East");
con.add(label2, "South");
con.add(label3, "West");
con.add(label4, "North");
con.add(label5, "Center");
mw.setVisible(true);
}
}
例5.6小应用程序先将若干个按钮和若干个标签放入JPanel中,然后将JPanel放入JScrollPane中,最后,将JScrollPane放入小程序的窗口中。程序所创建的JScrollPane总是带水平和垂直滚动条,滚动面板的可视范围小于面板的实际要求,可以移动滚动条的滑块显示面板原先不在可视范围内的区域。
class MyWindow extends JFrame {
public MyWindow(int w, int h) {
setTitle("滚动面板实例");
Container con = getContentPane();
con.setPreferredSize(new Dimension(w, h));
con.setLayout(new BorderLayout());
JPanel p = new JPanel();
p.setLayout(new GridLayout(6, 6));
for (int i = 0; i < 6; i++) {
p.add(new JLabel());
for (int j = 1; j <= 2; j++) {
p.add(new JButton("按钮" + (2 * i + j)));
p.add(new JLabel("标签" + (2 * i + j)));
}
p.add(new JLabel());
}
p.setBackground(Color.blue);
p.setPreferredSize(new Dimension(w + 60, h + 60));
JScrollPane scrollPane = new JScrollPane(p);
scrollPane.setPreferredSize(new Dimension(w - 60, h - 60));
add(scrollPane, BorderLayout.CENTER);// 小程序添加滚动面板
setVisible(true);
pack();
}
} class ScrollPane extends JScrollPane {
public ScrollPane(Component p) {
super(p);
setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
setVerticalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
}
} public class Example5_6 extends Applet {
MyWindow myWindow; public void init() {
myWindow = new MyWindow(400, 350);
}
}
例5.7小应用程序使用CardLayout布局,面板容器p使用CardLayout布局策略设置10个标签组件。窗口设有4个按钮,分别负责显示p的第一个组件、最后一个组件、当前组件的前一个组件和当前组件的后一个组件。
class MyPanel extends JPanel {
int x;
JLabel label; MyPanel(int a) {
x = a;
getSize();
label = new JLabel("我是第" + x + "个标签");
add(label);
} public Dimension getPreferredSize() {
return new Dimension(200, 50);
}
} public class Example5_7 extends Applet implements ActionListener {
CardLayout mycard;
MyPanel myPanel[];
JPanel p; private void addButton(JPanel pan, String butName, ActionListener listener) {
JButton aButton = new JButton(butName);
aButton.setActionCommand(butName);
aButton.addActionListener(listener);
pan.add(aButton);
} public void init() {
setLayout(new BorderLayout());// 小程序的布局是边界布局
mycard = new CardLayout();
this.setSize(400, 150);
p = new JPanel();
p.setLayout(mycard);// p的布局设置为卡片式布局
myPanel = new MyPanel[10];
for (int i = 0; i < 10; i++) {
myPanel[i] = new MyPanel(i + 1);
p.add("A" + i, myPanel[i]);
}
JPanel p2 = new JPanel();
addButton(p2, "第一个", this);
addButton(p2, "最后一个", this);
addButton(p2, "前一个", this);
addButton(p2, "后一个", this);
add(p, "Center");
add(p2, "South");
} public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("第一个")) {
mycard.first(p);
} else if (e.getActionCommand().equals("最后一个")) {
mycard.last(p);
} else if (e.getActionCommand().equals("前一个")) {
mycard.previous(p);
} else if (e.getActionCommand().equals("第后一个")) {
mycard.next(p);
}
}
}
例5.8小应用程序有两个文本框。
public class Example5_8 extends Applet {
static JTextField text1, text2;
Sqr s = new Sqr(); public void init() {
text1 = new JTextField(10);
text2 = new JTextField(10);
add(text1);
add(text2);
text1.addActionListener(s);// 类Sqr的实例s作为text1的监视器
}
} class Sqr implements ActionListener {
public void actionPerformed(ActionEvent e)// 实现接口ActionEvent
{
if (e.getSource() == Example5_8.text1) {
long n = Long.parseLong(Example5_8.text1.getText());// 将text1的文本转换成long型数据。
Example5_8.text2.setText(String.valueOf(n * n));// 将n*n转化成字符串。
} else { }
}
}
例5.9小应用程序设置一个文本区、一个文本框和两个按钮。
import java.util.*;
import java.applet.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*; public class Example5_9 extends Applet implements ActionListener {
JTextArea textA;
JTextField textF;
JButton b1, b2; public void init() {
setSize(250, 150);
textA = new JTextArea("", 5, 10);
textA.setBackground(Color.cyan);
textF = new JTextField("", 10);
textF.setBackground(Color.pink);
b1 = new JButton("求 和");
b2 = new JButton("重新开始");
textF.setEditable(false);
b1.addActionListener(this);
b2.addActionListener(this);
add(textA);
add(textF);
add(b1);
add(b2);
} public void actionPerformed(ActionEvent e) {
if (e.getSource() == b1) {
String s = textA.getText();
StringTokenizer tokens = new StringTokenizer(s);// 使用默认的分隔符激集合:空格、换行、Tab符和回车做分隔符。
int n = tokens.countTokens(), sum = 0, i;
for (i = 0; i <= n - 1; i++) {
String temp = tokens.nextToken();// 从文本区取下一个数据。
sum += Integer.parseInt(temp);
}
textF.setText("" + sum);
} else if (e.getSource() == b2) {
textA.setText(null);
textF.setText(null);
}
}
}
例5.10小程序计算从起始整数到终止整数中是因子倍数的所有数。
import java.applet.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*; class Panel1 extends JPanel {
JTextField text1, text2, text3; Panel1()// 构造方法。当创建Panel对象时,Panel被初始化为有三个标签。
{
// 三个文本框,布局为GridLayout(1,6)。
text1 = new JTextField(10);
text2 = new JTextField(10);
text3 = new JTextField(10);
setLayout(new GridLayout(1, 6));
add(new JLabel("起始数", JLabel.RIGHT));
add(text1);
add(new JLabel("终止数", JLabel.RIGHT));
add(text2);
add(new JLabel("因子", JLabel.RIGHT));
add(text3);
}
} class Panel2 extends JPanel// 扩展Panel类
{
JTextArea text;
JButton button; Panel2()// 构造方法。当创建Panel对象时,Panel被初始化为有一个标签。
{
// 一个文本框,布局为GridLayout(1,4)
text = new JTextArea(4, 10);
text.setLineWrap(true);
JScrollPane jsp = new JScrollPane(text);
button = new JButton("开始计算");
setLayout(new GridLayout(1, 4));
add(new JLabel("计算结果:", JLabel.RIGHT));
add(jsp);
add(new Label());
add(button);
}
} public class Example5_10 extends Applet implements ActionListener {
Panel1 panel1;
Panel2 panel2; public void init() {
setLayout(new GridLayout(3, 1));
setSize(400, 200);
panel1 = new Panel1();
panel2 = new Panel2();
add(new JLabel("计算从起始数到终止数是因子倍数的数", JLabel.CENTER));
add(panel1);
add(panel2);
(panel2.button).addActionListener(this);
} public void actionPerformed(ActionEvent e) {
if (e.getSource() == (panel2.button)) {
long n1, n2, f, count = 0;
n1 = Long.parseLong(panel1.text1.getText());
n2 = Long.parseLong(panel1.text2.getText());
f = Long.parseLong(panel1.text3.getText());
for (long i = n1; i <= n2; i++) {
if (i % f == 0) {
panel2.text.append(String.valueOf(i) + " ");
}
}
}
}
}
04747_Java语言程序设计(一)_第5章_图形界面设计(一)的更多相关文章
- ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...
- ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Deskto ...
- ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...
- python 教程 第十九章、 图形界面编程
第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...
- 04747_Java语言程序设计(一)_第3章_面向对象编程基础
链式编程 每次调用方法后,返回的是一个对象 /* * 链式编程 * 每次调用方法后,返回的是一个对象 */ class Student { public void study() { System.o ...
- 04747_Java语言程序设计(一)_第1章_Java语言基础
二进制0b开头 八进制0开头 十六进制0x开头 package com.jacky; public class Aserver { public static void main(String arg ...
- 04747_Java语言程序设计(一)_第10章_网络与数据库编程基础
例10.1说明InetAddress类的用法的应用程序. public class Example10_1 { public static void main(String args[]) { try ...
- 04747_Java语言程序设计(一)_第9章_输入和输出流
例9.1一个文件复制应用程序,将某个文件的内容全部复制到另一个文件. import java.io.*; public class Example9_1 { public static void ma ...
- 04747_Java语言程序设计(一)_第8章_多线程
例8.1应用程序用Thread子类实现多线程. import java.util.Date; public class Example8_1 { static Athread threadA; sta ...
- 04747_Java语言程序设计(一)_第7章_图形、图像与多媒体
例7.1小应用程序用6种字型显示字符串,显示内容说明本身的字型. import java.applet.*; import java.awt.*; public class Example7_1 ex ...
随机推荐
- Performance Tuning guide 翻译 || 前言
CSDN 对格式支持比較弱,能够到http://user.qzone.qq.com/88285879/blog/1399382878 看一致的内容. 前言Preface 包含例如以下几个小节 l Au ...
- 阿里云安装docker
选centos6.5输入操作系统 yum install docker-io docker -d 提示没有备用IP地址可以用来桥接卡 接下来的网卡中编辑eth0 DEVICE=eth0 ONBOOT ...
- [华为机试练习题]55.最大公约数 & 多个数的最大公约数
题目 描写叙述: 输入2个数字,最后输出2个数字的最大公约数 题目类别: 位运算 难度: 0基础 执行时间限制: 无限制 内存限制: 无限制 阶段: 入职前练习 输入: 2个整数 输出: 输出数字1和 ...
- Hacker(17)----认识Windows系统漏洞
Windows系统是迄今为止使用频率最高的操作系统,虽然其安全性随着版本的更新不断提高,但由于人为编写的缘故始终存在漏洞和缺陷.但Mircosoft公司通过发布漏洞补丁来提高系统的安全性,使Windo ...
- Linux查看网络即时网速
sar -n DEV 1 100 1代表一秒统计并显示一次 100代表统计一百次 使用ntop等工具,就更方便简单了,不过这个更灵活 P.S. sar在sysstat包 来源:http://www.c ...
- C# 将窗口移动到指定位置
private void button1_Click(object sender, EventArgs e) { Frm f = new Frm(); f.StartPosition = FormSt ...
- Javascript进阶篇——(DOM—节点---属性、访问节点)—笔记整理
节点属性在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType : ...
- VPN错误789:L2TP连接尝试失败
VPN 错误789:l2tp 连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到一个处理错误 Windows配置VPN,选择“使用IPsec的第2层隧道协议(L2TP/IPSec)”时, XP系 ...
- OpenGL ES 2.0 内置变量
1. 顶点着色器中的内置变量 输出变量 gl_Position(vec4):顶点数据位置gl_PointSize(float):计算一个点的大小 2.片元着色器中的内置变量 输入变量gl_FragCo ...
- poj1006 孙子定理
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 127944 Accepted: 40566 Des ...