java_day08_GUI

第八章:GUI组件

1.GUI概述-AWT和Swing
图形用户界面(Graphics User Interface, GUI) 是用户与程序交互的窗口,它比基于命令行的界面更直观并且更友好。
GUI的基本类库位于java.awt包中, 这个包也被称为抽象窗口工具集(Abstract Window Toolkit, AWT)。AWT按照面向对象的思想来创建GUI,它提供了容器类、组件类和布局管理器类。

随着Java的发展,AWT中的大部分组件已经渐渐被淘汰,它已经不能适应发展的需要,不能满足开发功能强大的用户界面的需要。这时Swing出现了,它是建立在AWT之上的组件集(对AWT组件的扩展),在不同的平台上都能保持组件的界面样式,因此得到了非常广泛的应用。javax.swing

注:AWT和Swing之间的最大的区别在于Swing组件的实现与本地实现无关,所以能保证Swing组件在不同的平台上都能显示出原有的样式,并且Swing组件比AWT组件具有更多的功能。
AWT组件都在java.awt包下面,Swing组件都在javax.swing包下面
例如AWT和Swing中都有按钮,
java.awt.Button
javax.swing.JButton

AWT和Swing中都有复选框,
java.awt.Checkbox
javax.swing.JCheckBox

AWT和Swing中都有对话框,
java.awt.Dialog
javax.swing.JDialog

AWT和Swing中都有菜单组件,
java.awt.Menu
javax.swing.JMenu
...

注1:它们之间的名字的特点
注2:javax.swing中绝大大多数的组件都是继承了java.awt中Component


2.组件、容器、布局管理器的介绍
这三种东西是GUI界面中最重要的组成部分。

1)组件
java.awt.Component类是所有组件的父类(这是个抽象类)。同时在该类中也定义了所有组件都应该具备的公共方法。

Component类型对象是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。例如图形用户界面中的按钮、复选框和滚动条等都是它的实例。

//注:该类实现的接口没有写出来
public abstract class Component{}

下面常用的类都是Component的"直接"子类:
java.awt.Button
Button类用于创建GUI中的按钮
java.awt.Canvas
Canvas类表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。
java.awt.Checkbox
Checkbox类用于创建GUI中的复选框
java.awt.Choice
Choice类表示一个弹出式选择菜单,当前的选择显示为菜单的标题。
java.awt.Container
Container类是所有容器类的父类.(容器本身也是一种组件)
java.awt.Label
Label类型对象是一个可在容器中放置文本的组件。一个标签只显示一行只读文本。文本可由应用程序更改,但是用户不能直接对其进行编辑
java.awt.List
List组件为用户提供了一个可滚动的文本项列表。可设置此 list,使其允许用户进行单项或多项选择
java.awt.Scrollbar
Scrollbar类可用于创建一个滚动条
java.awt.TextComponent
TextComponent类是所有允许编辑文本的组件的父类。

2)容器
java.awt.Container类是所有容器的父类。
容器也是一种特殊的组件,它是一个可包含其他组件的组件,所以Container类继承了Component类
public class Container extends Component{}

下面常用的类都是Container的"直接"子类:
javax.swing.JComponent
JComponent类是除顶层容器外所有Swing组件的基类
java.awt.Panel
Panel是最简单的容器类,应用程序可以将其他组件放在面板提供的空间内,这些组件包括其他面板
java.awt.Window
Window对象是一个没有边界和菜单栏的顶层窗口
java.awt.ScrollPane
用于实现单个组件的水平或垂直滚动的容器类

3)布局管理器
Java中的图形界面在布局管理上采用容器和布局管理相分离的方案,也就是说容器只是把组件放进来,但它不管怎样放置。至于如何放置需要用到布局管理器。
java.awt.LayoutManager接口是所有布局管理需要实现的接口

Java中常用布局管理器有:
BorderLayout 边界布局管理器
FlowLayout 流式布局管理器
GridLayout 网格布局管理器
CardLayout 卡片布局管理器

注:很多容器都是有默认的布局管理器的,同时也允许用户修改
注:也可以不使用任何布局管理器,自己使用坐标控制组件在容器中的位置


3.组件、容器、布局管理器的使用
1)常用的容器类,Frame和Panel
java.awt.Frame类:
public class Frame extends Window{}
java.awt.Frame是带有标题和边框的顶层窗口,它是java.awt.Window类的直接子类

例如:FrameTest.java

Frame frame = new Frame();
frame.setTitle("我的容器");
frame.setSize(500,500);
frame.setLocation(700, 300);
frame.setBackground(Color.lightGray);
frame.setResizable(true);
frame.setVisible(true);

注:frame要显示出来,最后一定要设置它的的可见性为true

思考:怎么能让窗口每次位于屏幕的正中间
Toolkit toolkit = Toolkit.getDefaultToolkit();
int width = (int) toolkit.getScreenSize().getWidth();
int height = (int) toolkit.getScreenSize().getHeight();

java.awt.Panel类:
public class Panel extends Container{}
Panel是最简单的容器类,也称为面板,应用程序可以将其他组件放在面板提供的空间内,这些组件包括其他面板(嵌套)。
注:Panel面板不能单独显示,必须把它放到Frame中

例如:PanelTest.java
注:运行后显示不了,设置Panel的大小位置以及可见性也没用
Panel panel = new Panel();
panel.setSize(400, 400);
panel.setLocation(700, 300);
panel.setBackground(Color.blue);
panel.setVisible(true);

例如:修改后,加入frame则可以显示
Frame frame = new Frame();
Panel panel = new Panel();
panel.setBackground(Color.blue);

frame.setSize(400, 400);
frame.setLocation(700, 300);
frame.add(panel);

frame.setVisible(true);

2)常用的容器类,JFrame JPanel
javax.swing.JFrame类:
public class JFrame extends Frame{}

例如:JFrameTest.java
JFrame jFrame = new JFrame();
jFrame.setTitle("我的容器");
jFrame.setSize(500,500);
jFrame.setLocation(700, 300);
jFrame.setBackground(Color.lightGray);
jFrame.setResizable(true);
jFrame.setVisible(true);

javax.swing.JPanel类:
public class JPanel extends JComponent
JPanel是一般轻量级容器,作用及用法和java.awt.Panel类似,它也是不能单独显示的。

3)常用的组件类(主要以Swing的为主,除非Swing中没有该组件)
javax.swing.JButton 按钮
例如:JButtonTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();

JButton btn = new JButton("登录");

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(btn);
jFrame.add(panel);

jFrame.setVisible(true);

javax.swing.JCheckBox 复选框
例如:JCheckBoxTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();

JCheckBox jck1 = new JCheckBox("篮球");
JCheckBox jck2 = new JCheckBox("足球");

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(jck1);
panel.add(jck2);
jFrame.add(panel);

jFrame.setVisible(true);

javax.swing.ButtonGroup 按钮组
javax.swing.JRadioButton 单选框
例如:JRadioButtonTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
//需要把俩个单选按钮放到ButtonGroup中,表示为一组
ButtonGroup bg = new ButtonGroup();
JRadioButton rbtn1 = new JRadioButton("男");
JRadioButton rbtn2 = new JRadioButton("女",true);

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

bg.add(rbtn1);
bg.add(rbtn2);
panel.add(rbtn1);
panel.add(rbtn2);
jFrame.add(panel);

jFrame.setVisible(true);

java.awt.Choice 下拉菜单
例如:ChoiceTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
Choice ColorChooser = new Choice();
ColorChooser.add("Green");
ColorChooser.add("Red");
ColorChooser.add("Blue");

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(ColorChooser);
jFrame.add(panel);

jFrame.setVisible(true);

javax.swing.JComboBox 下拉菜单
例如:JComboBoxTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
JComboBox<String> box = new JComboBox<>();
box.addItem("test1");
box.addItem("test2");
box.addItem("test3");

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(box);
jFrame.add(panel);

jFrame.setVisible(true);

javax.swing.ImageIcon 图片/图标
javax.swing.JLabel 标签(可放置文本和图片)
例如:JLabelTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
JLabel label1 = new JLabel("大家好");
JLabel label2 = new JLabel();
label2.setIcon(new ImageIcon("src/com/briup/test/1.png"));

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(label1);
panel.add(label2);
jFrame.add(panel);

jFrame.setVisible(true);

注:按钮上也能类似的设置图片

javax.swing.JList 显示数据列表并且允许用户选择一个或多个项的组件(按住ctrl键多选)
例如:JListTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
String[] data = {"one", "two", "three", "four"};
JList<String> myList = new JList<String>(data);


jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(myList);
jFrame.add(panel);

jFrame.setVisible(true);

javax.swing.JScrollBar 滚动条
例如:JScrollBarTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
//垂直 VERTICAL, 水平 HORIZONTAL
JScrollBar bar = new JScrollBar(JScrollBar.HORIZONTAL);
//需要这样设置滚动条的宽和高
bar.setPreferredSize(new Dimension(200, 20));
bar.setMinimum(0);
bar.setMaximum(100);
bar.setValue(80);

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(bar);
jFrame.add(panel);

jFrame.setVisible(true);


javax.swing.JTextArea 文本域
javax.swing.JScrollPane 滚动面板(一般和文本域一起使用)
例如:JScrollPaneTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
//需要给panel换一个布局管理器
panel.setLayout(new BorderLayout());
JTextArea area = new JTextArea();
area.setSize(100, 100);
JScrollPane scrollPane = new JScrollPane(area);

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(scrollPane);
jFrame.add(panel);

jFrame.setVisible(true);

javax.swing.JTextField 文本框
javax.swing.JPasswordField 密码框
例如:JTextFieldTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
JTextField field = new JTextField(10);
JPasswordField passwordField = new JPasswordField(10);


jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(field);
panel.add(passwordField);
jFrame.add(panel);

jFrame.setVisible(true);

javax.swing.JMenuBar 菜单栏
javax.swing.JMenu 菜单
javax.swing.JMenuItem 菜单项
例如:JMenuBarTest.java

//创建frame和panel
JFrame frame = new JFrame("JMenuBar");
JPanel panel = new JPanel();

//创建菜单栏工具条
JMenuBar bar = new JMenuBar();

//创建俩个菜单
JMenu sMenu, gMenu;
sMenu = new JMenu("系统");
gMenu = new JMenu("工具");

//创建菜单中的选项,并添加到系统菜单(sMenu)中
JMenuItem sItem, cItem, tItem;
sItem = new JMenuItem("开始导航");
cItem = new JMenuItem("刷新系统");
tItem = new JMenuItem("退出系统");
sMenu.add(sItem);
sMenu.addSeparator();
sMenu.add(cItem);
sMenu.addSeparator();
sMenu.add(tItem);


//创建菜单中的选项,并添加到工具菜单(gMenu)中
JMenuItem xyItem, ycItem;
xyItem = new JMenuItem("显示菜单");
ycItem = new JMenuItem("隐藏菜单");
gMenu.add(xyItem);
gMenu.addSeparator();
gMenu.add(ycItem);


//把系统菜单(sMenu)和工具菜单(gMenu)添加到菜单栏工具条中
bar.add(sMenu);
bar.add(gMenu);

//把菜单栏工具条添加到面板中
panel.add(bar);

//把面板添加到frame中
frame.add(panel);

//设置frame的相关属性
frame.setBounds(700, 500, 500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);

frame.setVisible(true);


javax.swing.JDialog 对话框
例如:JDialogTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
JButton okBut = new JButton("确定");
//参数1 对话框属于哪个窗口
//参数2 对话框标题
//参数3 弹框对话框后,是否阻止用户进行其他组件的操作
JDialog dialog = new JDialog(jFrame, "提示信息", true);

dialog.setBounds(730, 325, 350, 150);
dialog.setLayout(new FlowLayout());
dialog.add(okBut);


jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jFrame.add(panel);

jFrame.setVisible(true);
dialog.setVisible(true);

注:之后可以通过鼠标点击控制对话框的出现和消失


javax.swing.JProgressBar 进度条
例如:JProgressBarTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();
JProgressBar bar = new JProgressBar();
//最小值为0
bar.setMinimum(0);
//最大值为100
bar.setMaximum(100);
//设置进度条中的值初始为0
bar.setValue(0);
//显示当前进度条的状态
bar.setStringPainted(true);

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.add(bar);
jFrame.add(panel);

jFrame.setVisible(true);


java.awt.Canvas 画布
注:必须为Canvas创建子类并重写paint方法
例如:CanvasTest.java

JFrame jFrame = new JFrame();
final JPanel panel = new JPanel();
Canvas canvas = new Canvas(){
@Override
public void paint(Graphics g) {
g.drawLine(0, 0, panel.getWidth(), panel.getHeight());
}
};

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel.setLayout(new BorderLayout());
panel.add(canvas);
jFrame.add(panel);

jFrame.setVisible(true);


注:尝试在画布对象创建完后,添加如下代码观察效果
canvas.addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
int x = e.getX();
int y = e.getY();
Graphics g = canvas.getGraphics();
g.setColor(Color.RED);
g.fillOval(x, y, 10, 10);
}
});

注:addMouseMotionListener和addMouseListener所支持的事件是有区别的


4)常用的布局管理器的使用
注: JFrame的布局管理器默认是BorderLayout
JPanel的布局管理器默认是FlowLayout

BorderLayout 边界布局管理器
例如:BorderLayoutTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();

panel.setLayout(new BorderLayout());

JButton north,south,west,east,center;
north = new JButton("north");
south = new JButton("south");
west = new JButton("west");
east = new JButton("east");
center = new JButton("center");

//把按钮添加到panel中,并指明添加到的位置
panel.add(north,BorderLayout.NORTH);
panel.add(south,BorderLayout.SOUTH);
panel.add(west,BorderLayout.WEST);
panel.add(east,BorderLayout.EAST);

//panel.add(center)这样写和下面的效果是一样的
//如果你不指定放到BorderLayout那个位置的时候
//他会默认的把组件放到中间那个位置
panel.add(center,BorderLayout.CENTER);

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jFrame.add(panel);

jFrame.setVisible(true);


FlowLayout 流式布局管理器
例如:FlowLayoutTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();

panel.setLayout(new FlowLayout());

JButton[] buts = new JButton[50];
for(int i=1;i<=buts.length;i++){
if(i<10){
buts[i-1] = new JButton("0"+i);
}else if (i<=50) {
buts[i-1] = new JButton(""+i);
}
panel.add(buts[i-1]);
}

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jFrame.add(panel);

jFrame.setVisible(true);

GridLayout 网格布局管理器
例如:GridLayoutTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();

panel.setLayout(new GridLayout(3,3));

JButton[] buts = new JButton[9];
//设置container的布局管理器为GridLayout
//GridLayout(3,3)表示布局为3行3列

//循环创建按钮并放到panel中
for(int i=0;i<buts.length;i++){
buts[i] = new JButton((i+1)+"");
panel.add(buts[i]);
}

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jFrame.add(panel);

jFrame.setVisible(true);

CardLayout 卡片布局管理器
例如:CardLayoutTest.java

JFrame jFrame = new JFrame();
final JPanel panel = new JPanel();

panel.setLayout(new CardLayout());

JPanel[] jPanels = new JPanel[4];
//创建四个JPanel放到数组中并设置背景颜色
jPanels[0] = new JPanel();
jPanels[0].setBackground(Color.red);

jPanels[1] = new JPanel();
jPanels[1].setBackground(Color.blue);

jPanels[2] = new JPanel();
jPanels[2].setBackground(Color.cyan);

jPanels[3] = new JPanel();
jPanels[3].setBackground(Color.green);

//向CardLayout布局管理器中放置组件的时候一定要给组件起一个名字
panel.add("a",jPanels[0]);
panel.add("b",jPanels[1]);
panel.add("c",jPanels[2]);
panel.add("d",jPanels[3]);

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.add(panel);
jFrame.setVisible(true);

注:现在所看到的结果是四个颜色不同的JPanel叠在一起的效果,看到是最上面一个JPanel
可以在上面例子中加入以下代码,看效果如何.

panel.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
//获得panel容器上面的布局管理器
//并转为CardLayout类型的对象
CardLayout cl = (CardLayout) panel.getLayout();
//显示CardLayout管理器中的下一个组件
//这个参数表示:在哪一个容器中设置的这个CardLayout管理器
cl.next(panel);
//cl.show(panel, "d");
}
});

注:JPanel和JPanel之间可以嵌套,每个JPanel又可以设置为不同的布局管理器,这样就可以得到大都数想要的组件布局情况了


自定义组件位置
有些时候也可以不使用任何布局管理器,用户通过坐标自己设置组件位置。

例如:MyLayoutTest.java

JFrame jFrame = new JFrame();
JPanel panel = new JPanel();

//把布局管理器设置为null
//表示不使用任何管理器
panel.setLayout(null);
JButton btn = new JButton("登录");
//设置组件的大小和位置
btn.setSize(100,30);
btn.setLocation(80,60);

panel.add(btn);

jFrame.setSize(400, 400);
jFrame.setLocation(700, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.add(panel);
jFrame.setVisible(true);

4.编写一个GUI程序的基本方式
1)第一种情况:Test1.java
//不继承JFrame也不实现ActionListener
public class JFrameTest{
//声明容器和要用的组件
private JFrame frame;
private JButton button;

public JFrameTest(){
//初始化主容器
frame = new JFrame();
frame.setTitle("我的组件");
frame.setSize(500, 500);
frame.setLocation(700, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponent();
frame.setVisible(true);
}

//初始化组件
private void initComponent(){
//创建组件对象
button = new JButton("登录");

//把组件添加到容器中
frame.add(button);

//给组件添加事件监听器
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}
});
}

public static void main(String[] args){
new JFrameTest();
}

}

2)第二种情况:Test2.java
//继承JFrame
public class JFrameTest extends JFrame{
//声明容器和要用的组件
private JButton button;

public JFrameTest(){
//初始化主容器
this.setTitle("我的组件");
this.setSize(500, 500);
this.setLocation(700, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponent();
this.setVisible(true);
}

//初始化组件
private void initComponent(){
button = new JButton("登录");

this.add(button);

button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}
});
}

public static void main(String[] args){
new JFrameTest();
}

}

3)第三种情况:Test3.java
//继承JFrame同时实现ActionListener接口
public class JFrameTest extends JFrame implements ActionListener{
//声明容器和要用的组件
private JButton button;

public JFrameTest(){
//初始化主容器
this.setTitle("我的组件");
this.setSize(500, 500);
this.setLocation(700, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponent();
this.setVisible(true);
}

//初始化组件
private void initComponent(){
button = new JButton("登录");

this.add(button);

//给组件添加事件监听器
button.addActionListener(this);
}

@Override
public void actionPerformed(ActionEvent e) {
System.out.println("OK");
}

public static void main(String[] args){
new JFrameTest();
}

}


5.一个GUI的例子 MyFirstGUI.java
public class MyFirstGUI extends JFrame{
private static final long serialVersionUID = 1L;
private JButton button;
private JPanel jPanel;
private JLabel addLabel,eqsLabel;
private JTextField f1,f2,f3;

public MyFirstGUI() {
setTitle("MY-GUI");
//设置位置和宽高
setBounds(40, 40, 400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponent();
setVisible(true);
}

private void initComponent(){

//初始化组件
jPanel = new JPanel();

button = new JButton("add");
addLabel = new JLabel("+");
eqsLabel = new JLabel("=");
//创建文本输入框对象,并设置长度为5
f1 = new JTextField(5);
f2 = new JTextField(5);
f3 = new JTextField(5);

//设置容器的布局管理器并添加组件
jPanel.setLayout(new FlowLayout());

jPanel.add(f1);
jPanel.add(addLabel);
jPanel.add(f2);
jPanel.add(eqsLabel);
jPanel.add(f3);
jPanel.add(button);

this.add(jPanel);

//给指定的组件添加事件监听
button.addActionListener(new ActionListener(){
//当鼠标点击这个指定按钮的时候程序就会调用这个方法
@Override
public void actionPerformed(ActionEvent e) {
//拿到第一个输入框中的数组(String转换为Double)
double a =
Double.parseDouble(f1.getText());

//拿到第二个输入框中的数组(String转换为Double)
double b =
Double.parseDouble(f2.getText());

//相加得到结果
double c = a+b;
//把结果放到第三个输入框中
f3.setText(c+"");
}
});
}

public static void main(String[] args) {
new MyFirstGUI();
}

}


6.了解JFC
JFC(Java Foundation Classes)是一个图形框架,主要是由AWT、Swing以及Java2D三者所构成,若将这些一同搭配运用,则用Java程式语言撰写开发成的使用者界面,无论移转、转移到Microsoft WindowsWindows、Mac OS X或Linux等各种不同的作业平台上,都能保有一致性的图像呈现。

原文地址:https://www.cnblogs.com/yue-170305/p/11478928.html