GUI是图形用户界面的英文缩写,说点直白一点GUI就是窗口、按钮等元素的总称。java中实现GUI是利用java.awt包及其子包进行性编程的。
在java.awt包中component和container是的它的两个核心,前者包括了Button、TextField等实现类;后者是component的子类,但是后者是一些Frame、panel等容器实现类,这些容器元素可以容纳Component对象。
说的简单一点就是容器对象中可以添加Button、TextField等这些对象。下图中也进一步说明了这一点。
布局管理器
包含了FlowLayout,BorderLayout,GridLayout,布局管理器主要是管理添加到容器中的元素的布局。
就像一间房子,买了好多的家具,至于怎么摆放这些家具,完全是由这个房子的主人去决定的,而这个房子的主人就是布局管理器。
举例:设置7个按钮,利用FlowLayout居中排列。
import java.awt.*; public class TestFlowLayout2 { public static void main(String args[]) { Frame f = new Frame("Java Frame"); FlowLayout l = new FlowLayout(FlowLayout.CENTER, 20, 40); f.setLayout(l); f.setLocation(300,400); f.setSize(300,200); f.setBackground(new Color(204,204,255)); for(int i = 1; i<=7; i++){ f.add(new Button("BUTTON")); } f.setVisible(true); } }
事件监听
为容器中的Button等元素添加是事件,并利用实现对象监听器接口的对象,进行监听。
举例:点击键盘“箭头向上”键,就在cmd窗口中打印“up”。
<pre name="code" class="java">import java.awt.*; import java.awt.event.*; public class TestKey{ public static void main(String arg[]){ new KeyFrame().launchFrame(); } } class KeyFrame extends Frame{ public void launchFrame(){ setSize(200,200); setLocation(300,300); addKeyListener(new MykeyMon()); //注册事件 setVisible(true); } } class MykeyMon extends KeyAdapter{ //监听器类 public void keyPressed(KeyEvent e){ int keyCode=e.getKeyCode(); if (keyCode==KeyEvent.VK_UP){ System.out.println("up"); //监听器动作 } } }
监听器类创建方法:
内部类:在外围类的内部书写一个类,方便此类对成员变量和成员方法的访问。
对上面的例子的改造。
import java.awt.*; import java.awt.event.*; public class TestKey{ public static void main(String arg[]){ new KeyFrame().launchFrame(); } } class KeyFrame extends Frame{ public void launchFrame(){ setSize(200,200); setLocation(300,300); addKeyListener(new MykeyMon()); setVisible(true); } class MykeyMon extends KeyAdapter{ //内部类 public void keyPressed(KeyEvent e){ int keyCode=e.getKeyCode(); if (keyCode==KeyEvent.VK_UP){ System.out.println("up"); } } } }
匿名类:创建时用New语句来声明它们。
对上面的例子的改造。
import java.awt.*; import java.awt.event.*; public class TestKey{ public static void main(String arg[]){ new KeyFrame().launchFrame(); } } class KeyFrame extends Frame{ public void launchFrame(){ setSize(200,200); setLocation(300,300); this.addKeyListener(new MykeyMon(){ public void keyPressed(KeyEvent e){ //匿名类 int keyCode=e.getKeyCode(); if (keyCode==KeyEvent.VK_UP){ System.out.println("up"); } } }); setVisible(true); } }
总结:1.GUI通过java.awt包及其子包实现。2.容器元素中添加Button等这些元素。3.布局管理器管理容器中元素的布局。4.容器中的元素可以添加事件监听。