Panel downc = new Panel(new GridLayout(2,2)); down.add(downc,BorderLayout.CENTER); downc.add(new Button(\ downc.add(new Button(\ downc.add(new Button(\ downc.add(new Button(\
f.setSize(400,300); f.setVisible(true); } }
布局管理器总结
Frame是一个顶级窗口,Frame的缺省布局管理器为BorderLayout
Panel无法单独显示,必须添加到某个容器中,Panel的缺省布局管理器为FlowLayout
当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器
使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的大小和位置属性,如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖 如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null)
事件监听 注册 事件源对象 实现了某种监听器接口 的类的对象 向监听器传送某种事件对象 当某种事情发生 (封装了某种事件的信息) 接到事件对象后进行某种处理
import java.awt.*;
import java.awt.event.*;
public class TestActionEvent {
public static void main(String args[]) { Frame f = new Frame(\
Button b = new Button(\ Monitor bh = new Monitor(); b.addActionListener(bh);
f.add(b,BorderLayout.CENTER);
f.pack();//调整此窗口的大小,以适合其子组件的首选大小和布局 f.setVisible(true); }
}
class Monitor implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println(\ } }
TextField类
java.awt.TextField类用来创建文本框对象 TextField有如下常用方法: TextField()
TextField(int columns) TextField(String text)
TextField(String text,int columns) public void setText(String t) public String getText()
public void setEchoChar(char c):设置回显字符 public void setEditable(boolean b) public boolean isEditable()
public void setBackground(Color c)
public void select(int selectionStart,int selectionEnd) public void selectAll()
public void addActionListener(ActionListener):添加动作监听器
TextField事件监听
TextField对象可能发生Action(光标在文本框内敲回车)事件。与该事件对应的事件类是java.awt.event.ActionEvent
用来处理ActionEvent事件是实现java.awt.event.ActionListener接口的类的对象,ActionListener接口定义有方法:
public void actionPerformed(ActionEvent e)
实现该接口的类要在该方法中添加处理该事件(Action)的语句
使用addActionListener(ActionListener l)方法为TextField对象注册一个ActionListener对象,当TextField对象发生Action事件时,会生成一个ActionEvent对象,该对象作为参数传递给ActionListerner对象的actionPerformer方法在方法中可以获取该对象的信息,并做相应的处理
import java.awt.*;
import java.awt.event.*; public class TFActionEvent {
public static void main(String[] args) { new TFFrame(); } }
class TFFrame extends Frame
{
TFFrame() {
TextField tf = new TextField(); add(tf);
tf.addActionListener(new TFActionListener()); //tf.setEchoChar(‘*’);//密码 pack();
setVisible(true); } }
class TFActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
TextField tf = (TextField)e.getSource(); System.out.println(tf.getText()); tf.setText(\ } }
持有对方引用
import java.awt.*;
import java.awt.event.*; public class TFMath {
public static void main(String[] args) { new TFFrame().launchFrame(); } }
class TFFrame extends Frame { TextField num1,num2,num3; public void launchFrame() { num1 = new TextField(10); num2 = new TextField(10); num3 = new TextField(15);
Label lblPlus = new Label(\ Button btnEqual = new Button(\
btnEqual.addActionListener(new MyMonitor(this)); setLayout(new FlowLayout());
add(num1);add(lblPlus);add(num2);add(btnEqual);add(num3); pack();
setVisible(true); } }
class MyMonitor implements ActionListener { /*
TextField num1,num2,num3;
public MyMonitor(TextField num1,TextField num2,TextField num3) { this.num1 = num1; this.num2 = num2; this.num3 = num3; } */
TFFrame tf = null;
public MyMonitor(TFFrame tf) { this.tf = tf; }
public void actionPerformed(ActionEvent e) {
int n1 = Integer.parseInt(tf.num1.getText()); int n2 = Integer.parseInt(tf.num2.getText()); tf.num3.setText(\ } }
内部类OutClass$InClass.class 好处:
可以方便的访问包装类的成员
可以更清楚的组织逻辑,防止不应该被其他类访问的类进行访问 何时使用:
该类不允许或不需要其他类进行访问时
import java.awt.*;
import java.awt.event.*; public class TFMath {
public static void main(String[] args) { new TFFrame().launchFrame(); } }
class TFFrame extends Frame { TextField num1,num2,num3; public void launchFrame() { num1 = new TextField(10); num2 = new TextField(10); num3 = new TextField(15);
Label lblPlus = new Label(\ Button btnEqual = new Button(\
btnEqual.addActionListener(new MyMonitor()); setLayout(new FlowLayout());
相关推荐: