第八章: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等各种不同的作业平台上,都能保有一致性的图像呈现。

最新文章

  1. JavaScript学习笔记——事件
  2. ccc animation
  3. dual,rowid,rownum
  4. cdoj 31 饭卡(card) 01背包
  5. 【bzoj2333】 SCOI2011—棘手的操作
  6. poj 1195Mobile phones
  7. Asset Catalog Creator Free 生成程序内图标的软件
  8. Spring 集成 Dubbo
  9. 使用Modelsim进行简单仿真
  10. Day3 - Linux系统安装_Centos6.9
  11. Python语言——基础01-环境安装、注释、变量
  12. 【Leetcode】无重复字符的最长子串
  13. linux less对文件内容进行搜索
  14. s9.16作业,员工信息表
  15. Kali2.0更新
  16. 微软BI 之SSRS 系列 - 如何在 MDX 查询中获取有效的 MEMBER 成员属性作为参数传递
  17. 【Finchley】【升级变更】Spring Cloud 升级到Finchley版本后需要注意的地方
  18. zzulioj 1206 字符串的修改 (字符串修改)
  19. SVN下载项目导入到eclipse中出现错误解决办法:
  20. 关于cp命令的编写

热门文章

  1. 模板引擎总结(Thymeleaf,FreeMarker,Enjoy,Velocity,JSP等)
  2. kubeadm安装集群系列-3.添加工作节点
  3. springboot整合es客户端操作elasticsearch(五)
  4. lua调用shell 脚本
  5. windows下安装Sonar
  6. 16.Azkaban的安装
  7. Parse Lisp Expression
  8. 自然语言处理工具python调用hanlp的方法步骤
  9. oracle -- 查询执行计划,判读查询语句优劣
  10. 石子合并(直线版+环形版)&amp;(朴素写法+四边形优化+GarsiaWachs算法)