您的位置:首页 > 编程语言 > Java开发

JavaSE学习 第十三章 Swing基础

2013-07-30 13:08 399 查看


反射在Java Swing中的应用
/article/5979187.html

1.重量级组件和轻量级组件

重量级组件是因操作系统而异的,是对本地操作系统的组件的一个封装

轻量级组件是利用Java绘图技术在重量级组件上绘图而成的

Swing与AWT的关系

相关基本概念

Java基础类库(Java Foundation Classes,JFC)

重量组件(Heavy-Weight Components)

轻量组件(Light-Weight Components)

可视化组件(Visual Component)

Swing组件根父类JComponent

java.lang.Object

|

+----java.awt.Component

|

+----java.awt.Container

|

+----javax.swing.JComponent

2.组件介绍

①JFrame

它与Frame最大的区别:它不是单独的一个组件,它是一个容器,可以用来装很多的组件

Container c=jf.getContentPane();

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JFrame继承并扩充了java.awt.Frame类,JFrame实现了javax.swing.WindowConstants接口,

该接口中定义了用于控制窗口关闭操作的整型常量,包括:

DO_NOTHING_ON_CLOSE

HIDE_ON_CLOSE

DISPOSE_ON_CLOSE

EXIT_ON_CLOSE

代码:

import java.awt.Container;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestJFrame{
public static void main(String[] args){
JFrame jf = new JFrame("My Test");
Container c = jf.getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));
JLabel greet = new JLabel("Hello,World !");
JLabel bye = new JLabel(" Bye,World ! ");
bye.setBackground(Color.BLUE);
bye.setOpaque(true);
c.add(greet);
c.add(bye);
c.setBackground(Color.GREEN);
jf.setSize(200,100);
jf.setLocation(400,200);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}


②标准对话框

标准对话框(javax.swing.JOptionPane)用于实现程序与用户的便捷交互,其作用包括:

向用户发出错误通知

警告/确认用户操作

接收用户输入简单信息

列举简单选择项供用户选取

代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestJOptionPane implements ActionListener{
private JFrame jf = new JFrame("标准对话框测试");

public static void main(String[] args){
new TestJOptionPane().createUI();
}
public void createUI(){
JToolBar jtb = new JToolBar();

String[] s = {"错误","退出确认1","退出确认2","警告","输入","选择"};
int size = s.length;
JButton[] button = new JButton[size];
for(int i=0;i<size;i++){
button[i] = new JButton(s[i]);
button[i].addActionListener(this);
jtb.add(button[i]);
}
jf.add(jtb,"North");
jf.setSize(350,150);
jf.setLocation(400,200);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if(s.equals("错误")){
JOptionPane.showMessageDialog(null, "要显示的错误信息---",
"错误提示", JOptionPane.ERROR_MESSAGE);
}else if(s.equals("退出确认1")){
int result = JOptionPane.showConfirmDialog(null,
"您真的要退出程序吗?", "请确认", JOptionPane.YES_NO_OPTION);
if(result == JOptionPane.OK_OPTION){
System.exit(0);
}
}else if(s.equals("退出确认2")){
int result = JOptionPane.showConfirmDialog(null,
"退出前是否保存程序?");
if(result == JOptionPane.YES_OPTION){
System.out.println("保存程序---");
System.exit(0);
}else if(result == JOptionPane.NO_OPTION){
System.exit(0);
}
}else if(s.equals("警告")){
Object[] options = { "继续", "撤消" };
int result = JOptionPane.showOptionDialog(null,
"本操作可能导致数据丢失", "Warning", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE,null, options, options[0]);
if(result == 0){
System.out.println("继续操作---");
}
}else if(s.equals("输入")){
String name = JOptionPane.showInputDialog("请输入您的姓名:");
if(name != null){
System.out.println("姓名:" + name);
}
}else if(s.equals("选择")){
Object[] possibleValues = { "体育", "政治", "经济","文化" };
Object selectedValue = JOptionPane.showInputDialog(null,
"Choose one", "Input",JOptionPane.INFORMATION_MESSAGE, null,
possibleValues, possibleValues[0]);
String result = (String)selectedValue;
if(result != null){
System.out.println("你选择的是:" + result);
}
}
}
}


③JTable 和 JTree

javax.swing.JTable 用于以传统的表格形式来显示数据:

表头:标题行,给出每一列(字段)的名称。

表体:由多行多列、规则矩阵形式的单元格组成,真正的数据信息则显示在每个单元格中。

javax.swing.JTree则是以“树”状结构分层次显示数据信息。

代码:

TableExample.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TableExample{
public static void main(String args[]){
JFrame myFrame = new JFrame("Table Example");
Object data[][] ={
{1,"张三","男","18","010.82607080"},
{2,"李四","女","24","021.68720890"},
{3,"王五","男","43","0459.4990893"},
{4,"赵六","男","32","010.67887098"},
{5,"任七","女","15","010.84682089"},
{6,"吴八","男","76","010.63540177"},
};
String columnNames[] ={"编号","姓名","性别","年龄","电话"};
JTable table = new JTable(data,columnNames);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//JScrollPane pane = new JScrollPane(table);
JScrollPane pane = new JScrollPane();
pane.setViewportView(table);

myFrame.add("Center",pane);
myFrame.setSize(350,150);
myFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
myFrame.setVisible(true);
}
}

TreeExample.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
public class TreeExample {
public static void main(String args[]){
JFrame myFrame = new JFrame("Tree Example");
DefaultMutableTreeNode rootNode = createNodes();
JTree tree = new JTree(rootNode);
tree.setRootVisible(true);
JScrollPane pane = new JScrollPane();
pane.setViewportView(tree);
myFrame.add("Center",pane);
myFrame.setSize(400,250);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
}

public static DefaultMutableTreeNode createNodes(){
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Java Stuff");
DefaultMutableTreeNode resources = new DefaultMutableTreeNode("Resources");
DefaultMutableTreeNode tools = new DefaultMutableTreeNode("Tools");
rootNode.add(resources);
rootNode.add(tools);

DefaultMutableTreeNode webSites =new DefaultMutableTreeNode("Web Sites");
DefaultMutableTreeNode books = new DefaultMutableTreeNode("Books");
resources.add(webSites);
resources.add(books);

DefaultMutableTreeNode magazines = new DefaultMutableTreeNode("Magazines");
magazines.add(new DefaultMutableTreeNode ("Javology"));
magazines.add(new DefaultMutableTreeNode ("JavaWorld"));

webSites.add(new DefaultMutableTreeNode ("JavaSoft"));
webSites.add(new DefaultMutableTreeNode ("Gamelan"));
webSites.add(magazines);

books.add(new DefaultMutableTreeNode("Special Edition Using Java 1.2"));
tools.add(new DefaultMutableTreeNode ("JBuilder"));
tools.add(new DefaultMutableTreeNode ("Visual J++"));
tools.add(new DefaultMutableTreeNode ("Visual Age for Java"));
tools.add(new DefaultMutableTreeNode ("Apptivity"));

return rootNode;
}
}

3.特殊组件:定时器

javax.swing.Timer提供了定时器功能——用于在指定的时间延迟之后触发ActionEvent事件,以执行所需的处理逻辑。

相关方法:

setRepeats()

setInitialDelay()

stop()

restart()

以上四个方法的作用分别是:

是否循环触发

设置首次延迟的时间

停止当前的计时器

计时器重新启动

代码:

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.Timer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;

public class TestTimer{
public static void main(String[] args){
JFrame jf = new JFrame("Clock");
JButton pause = new JButton("Pause");
JLabel clock = new JLabel("Clock");
clock.setBackground(Color.GREEN);
clock.setOpaque(true);
clock.setHorizontalAlignment(JLabel.CENTER);
jf.add(clock,"Center");
jf.add(pause,"North");
jf.setSize(140,80);
jf.setLocation(500,300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);

MyListener m1 = new MyListener(clock);
Timer t1 = new Timer(1000,m1);
t1.setInitialDelay(0);
t1.start();
MyListener2 m2 = new MyListener2(t1,pause,clock);
pause.addActionListener(m2);
}
}

class MyListener  implements ActionListener{
private JLabel clock;
public MyListener(JLabel clock){
this.clock = clock;
}
public void actionPerformed(ActionEvent e){
Calendar c = new GregorianCalendar();
String time = c.get(Calendar.YEAR) + "-" +
(c.get(Calendar.MONTH) + 1) + "-" +
c.get(Calendar.DATE)  + "  " ;
int h = c.get(Calendar.HOUR_OF_DAY);
int m = c.get(Calendar.MINUTE);
int s = c.get(Calendar.SECOND);
String ph = h<10 ? "0":"";
String pm = m<10 ? "0":"";
String ps = s<10 ? "0":"";
time += ph + h + ":" + pm + m + ":" + ps + s;
clock.setText(time);
clock.repaint();
}
}

class MyListener2 implements ActionListener{
private Timer timer;
private JButton button;
private JLabel clock;
private boolean running= true;

public MyListener2(Timer timer,JButton button,JLabel clock){
this.timer = timer;
this.button = button;
this.clock = clock;
}
public void actionPerformed(ActionEvent e){
if(running){
timer.stop();
button.setText("Replay");
clock.setBackground(Color.RED);
}else{
timer.restart();
button.setText("Pause");
clock.setBackground(Color.green);
}
running = !running;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: