在GUI(图形化用户交互界面)中采用了窗口,按钮,复选框,菜单,文本域这样的图形屏幕组件。
在JAVA中建立一个GUI程序至少需要三类对象:组件,事件,监听器。其中按钮、文本域、标签、滚动条
和菜单等都是GUI组件。
容器是一种特殊的组件,它可以容纳其他的组件。
事件也是一个对象,他代表我们引起注意的某些事情。列如:按下鼠标或键盘都会生成事件。大多数GUI组件
都可以生成事件,表示对应的那个组件的用户动作。如:按钮组件会生成表示按钮被按下的事件。以GUI为基础
的响应来自用户事件程序称为事件驱动的程序。
监听器也是一个对象,它等待事件的发生,并在事件发生时以某种方式响应它。设计基于GUI程序的大部分工作
就是建立监听器,所监听的事件及产生事件的组件之间的关系
要编写监听器类要完成以下几步:实例化并设置必要的组件
实现监听器类,定义具体事件发生时的对策
建立监听器与产生事件之间的关系
基本容器JFrame
它是Component的子类,它内部定义的常用方法如下:
图片引用自:https://www.cnblogs.com/MichaelLi1994/p/3830410.html
package element;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SimpleGUiTest1 implements ActionListener{
JButton but;
public static void main(String[] args) {
SimpleGUiTest1 c = new SimpleGUiTest1();
c.visible();
}
public void visible() {
JFrame frame = new JFrame("组件");
but = new JButton("push!");
but.addActionListener(this);//建立监听器
/*
* JFrame下的getContentPane()方法是获取此窗口的容器对象
* 在容器中添加按钮but
* */
frame.getContentPane().add(but);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
but.setText("shj");
}
}
一个例子:建立一个窗口,在窗口中进行以下操作:按住按钮push,然后会显示标签push:次数
package element;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JFrameTest {
public static void main(String[] args) {
JFrame c = new JFrame("窗口计数器");
c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
PushCount x = new PushCount();
c.getContentPane().add(x);;
c.setSize(300, 300);
c.pack();//调整窗口大小,以用来适应其他组件
c.setVisible(true);
}
}
class PushCount extends JPanel{
private int count ;
private JButton but;
private JLabel label;
public PushCount() {
count = 0;
but = new JButton("push");
but.addActionListener(new buttons());
label = new JLabel("pushs:"+count);
add(but);
add(label);
this.setBackground(Color.white);
this.setPreferredSize(new Dimension(300,400));
}
public class buttons implements ActionListener{
public void actionPerformed (ActionEvent e) {
count++;
label.setText("pushs:"+count);
}
}
}