黑马程序员技术交流社区
标题:
java图形界面(AWT)【转载】
[打印本页]
作者:
yqw_gz_java
时间:
2019-5-22 11:08
标题:
java图形界面(AWT)【转载】
本帖最后由 yqw_gz_java 于 2019-5-22 11:10 编辑
【转自】https://www.cnblogs.com/zhzhang/p/5720116.html
1.
基本的java Frame操作。
Java的图形界面的类主要包括AWT和Swing。在AWT中图形元素的父类为Component。
继承关系如下:Component->Container->Window->Frame->JFrame。(注意:Swing对AWT进行了扩展)。
下面给出一个简单的java图形程序:
package
com.guan.visualTest.frameTest
;
import
java.awt.Button
;
import
java.awt.event.WindowAdapter
;
import
java.awt.event.WindowEvent
;
import
javax.swing.JFrame
;
public class
MainFrame {
public static void
main
(String[] args)
{
//创建frame
JFrame frame =
new
JFrame(
"welcome!!"
)
;
//调整frame的大小和初始位置
frame.setSize(
400
,
400
)
;
frame.setLocation(
100
,
100
)
;
//新建5个Button
Button button1 =
new
Button(
"hello1"
)
;
Button button2 =
new
Button(
"hello2"
)
;
Button button3 =
new
Button(
"hello3"
)
;
Button button4 =
new
Button(
"hello4"
)
;
Button button5 =
new
Button(
"hello5"
)
;
//将5个Button添加到frame中
frame.add(button1
,
"East"
)
;
frame.add(button2
,
"West"
)
;
frame.add(button3
,
"South"
)
;
frame.add(button4
,
"Center"
)
;
frame.add(button5
,
"North"
)
;
//增加窗口监听事件,使用内部类方法,并用监听器的默认适配器
frame.addWindowListener(
new
WindowAdapter(){
//重写窗口关闭事件
@Override
public void
windowClosing
(WindowEvent arg0) {
System.
exit
(
0
)
;
}
})
;
//显示窗体
frame.setVisible(
true
)
;
}
}
2.
AWT的布局管理器
AWT中主要有四种布局管理器:FlowLayout、GridLayout、BorderLayout和CardLayout。
下面给出这四种布局管理器的源码:
package
com.guan.visualTest.frameTest
;
import
java.awt.BorderLayout
;
import
java.awt.Button
;
import
java.awt.CardLayout
;
import
java.awt.FlowLayout
;
import
java.awt.Frame
;
import
java.awt.GridLayout
;
import
java.awt.Panel
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionListener
;
import
java.awt.event.WindowAdapter
;
import
java.awt.event.WindowEvent
;
public class
YourFrame
extends
Frame{
private static final long
serialVersionUID
=
1L
;
Panel
borderLayoutPanel
;
Panel
cardLayoutPanel
;
Panel
flowLayoutPanel
;
Panel
gridLayoutPanel
;
private void
generateGridLayoutPanel
() {
gridLayoutPanel
=
new
Panel()
;
gridLayoutPanel
.setLayout(
new
GridLayout(
2
,
2
))
;
Button button1 =
new
Button(
"button1"
)
;
Button button2 =
new
Button(
"button2"
)
;
Button button3 =
new
Button(
"button3"
)
;
Button button4 =
new
Button(
"button4"
)
;
gridLayoutPanel
.add(button1)
;
gridLayoutPanel
.add(button2)
;
gridLayoutPanel
.add(button3)
;
gridLayoutPanel
.add(button4)
;
}
private void
generateFlowLayoutPanel
() {
flowLayoutPanel
=
new
Panel()
;
flowLayoutPanel
.setLayout(
new
FlowLayout())
;
Button button1 =
new
Button(
"button1"
)
;
Button button2 =
new
Button(
"button2"
)
;
Button button3 =
new
Button(
"button3"
)
;
Button button4 =
new
Button(
"button4"
)
;
Button button5 =
new
Button(
"button5"
)
;
button1.addActionListener(
new
ActionListener() {
@Override
public void
actionPerformed
(ActionEvent e) {
((Button)e.getSource()).setLabel(
"welcome "
)
;
}
})
;
flowLayoutPanel
.add(button1)
;
flowLayoutPanel
.add(button2)
;
flowLayoutPanel
.add(button3)
;
flowLayoutPanel
.add(button4)
;
flowLayoutPanel
.add(button5)
;
}
private void
generateBorderLayoutPanel
() {
borderLayoutPanel
=
new
Panel()
;
borderLayoutPanel
.setLayout(
new
BorderLayout())
;
Button button1 =
new
Button(
"South"
)
;
Button button2 =
new
Button(
"West"
)
;
Button button3 =
new
Button(
"East"
)
;
Button button4 =
new
Button(
"North"
)
;
Button button5 =
new
Button(
"Center"
)
;
borderLayoutPanel
.add(button1
,
BorderLayout.SOUTH)
;
borderLayoutPanel
.add(button2
,
BorderLayout.WEST)
;
borderLayoutPanel
.add(button3
,
BorderLayout.EAST)
;
borderLayoutPanel
.add(button4
,
BorderLayout.NORTH)
;
borderLayoutPanel
.add(button5
,
BorderLayout.CENTER)
;
}
private void
genrateCardLayoutPanel
() {
cardLayoutPanel
=
new
Panel()
;
final
CardLayout cl =
new
CardLayout()
;
cardLayoutPanel
.setLayout(cl)
;
Button button1 =
new
Button(
"black"
)
;
Button button2 =
new
Button(
"red"
)
;
ActionListener al =
new
ActionListener() {
@Override
public void
actionPerformed
(ActionEvent e) {
cl
.next(
cardLayoutPanel
)
;
}
}
;
button1.addActionListener(al)
;
button2.addActionListener(al)
;
cardLayoutPanel
.add(button1
,
"1"
)
;
cardLayoutPanel
.add(button2
,
"2"
)
;
}
public
YourFrame
(String panelName) {
super
(
"panelName"
)
;
generateBorderLayoutPanel()
;
generateFlowLayoutPanel()
;
generateGridLayoutPanel()
;
genrateCardLayoutPanel()
;
setLayout(
new
GridLayout(
2
,
2
))
;
add(
borderLayoutPanel
)
;
add(
flowLayoutPanel
)
;
add(
gridLayoutPanel
)
;
add(
cardLayoutPanel
)
;
setSize(
800
,
800
)
;
setLocation(
100
,
100
)
;
addWindowListener(
new
WindowAdapter(){
@Override
public void
windowClosing
(WindowEvent arg0) {
System.
exit
(
0
)
;
}
})
;
}
public static void
main
(String[] args) {
YourFrame yourFrame =
new
YourFrame(
"welcome"
)
;
yourFrame.setVisible(
true
)
;
}
}
3.
菜单栏的实现:
菜单栏关键的类包括MenuBar、Menu和MenuItem。下面给出测试代码:
package
com.guan.visualTest.frameTest
;
import
java.awt.FileDialog
;
import
java.awt.Frame
;
import
java.awt.Menu
;
import
java.awt.MenuBar
;
import
java.awt.MenuItem
;
import
java.awt.TextArea
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionListener
;
import
java.awt.event.WindowAdapter
;
import
java.awt.event.WindowEvent
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
public class
MenuFrame {
public static void
main
(String[] args) {
final
Frame frame =
new
Frame()
;
frame.setSize(
800
,
800
)
;
frame.setLocation(
100
,
100
)
;
frame.addWindowListener(
new
WindowAdapter(){
@Override
public void
windowClosing
(WindowEvent e) {
System.
exit
(
0
)
;
}
})
;
final
TextArea ta =
new
TextArea()
;
frame.add(ta)
;
//创建菜单栏
MenuBar mb =
new
MenuBar()
;
//创建菜单
Menu file =
new
Menu(
"File"
)
;
Menu edit =
new
Menu(
"Edit"
)
;
//创建菜单项
MenuItem mi1 =
new
MenuItem(
"Open"
)
;
//添加打开文件功能响应
mi1.addActionListener(
new
ActionListener() {
@Override
public void
actionPerformed
(ActionEvent e) {
FileDialog fd =
new
FileDialog(
frame
,
"打开文件"
,
FileDialog.LOAD)
;
fd.setVisible(
true
)
;
String fileName = fd.getDirectory()+fd.getFile()
;
if
(fileName !=
null
)
{
try
{
FileInputStream fis =
new
FileInputStream(fileName)
;
byte
[] buf =
new byte
[
10
*
1024
]
;
try
{
int
len = fis.read(buf)
;
ta
.append(
new
String(buf
,
0
,
len))
;
fis.close()
;
}
catch
(IOException e1) {
e1.printStackTrace()
;
}
}
catch
(FileNotFoundException e1) {
e1.printStackTrace()
;
}
}
}
})
;
MenuItem mi2 =
new
MenuItem(
"Save"
)
;
MenuItem mi3 =
new
MenuItem(
"Other Save"
)
;
MenuItem mi4 =
new
MenuItem(
"Close"
)
;
//添加 关闭响应
mi4.addActionListener(
new
ActionListener() {
@Override
public void
actionPerformed
(ActionEvent arg0) {
System.
exit
(
0
)
;
}
})
;
MenuItem mi5 =
new
MenuItem(
"Cope"
)
;
MenuItem mi6 =
new
MenuItem(
"Paste"
)
;
file.add(mi1)
;
file.add(mi2)
;
file.add(mi3)
;
file.add(mi4)
;
edit.add(mi5)
;
edit.add(mi6)
;
mb.add(file)
;
mb.add(edit)
;
frame.setMenuBar(mb)
;
frame.setVisible(
true
)
;
}
}
4.
最后Swing的简单测试
package
com.guan.visualTest.frameTest
;
import
java.awt.BorderLayout
;
import
javax.swing.JButton
;
import
javax.swing.JFrame
;
public class
SwingFrame {
public static void
main
(String[] args) {
JFrame frame =
new
JFrame()
;
frame.setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE
)
;
JButton button =
new
JButton(
"ok"
)
;
frame.getContentPane().add(button
,
BorderLayout.WEST)
;
frame.setSize(
800
,
800
)
;
frame.setLocation(
100
,
100
)
;
frame.setVisible(
true
)
;
}
}
作者:
zzzz2017
时间:
2019-5-22 17:04
超级厉害,学习了
作者:
zzzz2017
时间:
2019-5-22 17:05
不错不错,学习了
作者:
苏小妹
时间:
2019-5-22 17:24
66666666666666666666666666666666666666
作者:
小小丫
时间:
2019-5-27 17:08
棒棒哒,不错哦
作者:
苏小妹
时间:
2019-6-12 17:11
6666,牛气呀~
作者:
苏小妹
时间:
2019-6-12 17:12
棒棒哒~~~~
作者:
苏小妹
时间:
2019-6-12 17:13
棒棒哒,加油加油加油~~
作者:
苏小妹
时间:
2019-6-12 17:14
棒棒哒,加油加油加油~~~
作者:
苏小妹
时间:
2019-6-12 17:21
加油加油加油加油,棒棒哒~~~
作者:
苏小妹
时间:
2019-6-12 17:22
加油加油加油。棒棒哒~~
作者:
苏小妹
时间:
2019-6-12 17:35
高薪就业,恭喜恭喜~~~
作者:
猪小屁屁
时间:
2019-6-17 17:59
加油加油加油~棒棒哒
作者:
猪小屁屁
时间:
2019-6-17 17:59
加油加油加油,棒棒哒~~~~
作者:
猪小屁屁
时间:
2019-6-17 18:04
加油加油加油,棒棒哒~~~~
作者:
猪小屁屁
时间:
2019-6-17 18:06
棒棒哒,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2