java无难事笔记(十)
来源:互联网 发布:算法统宗分银子问题 编辑:程序博客网 时间:2024/05/18 14:12
n 在AWT中,给我们提供了五种布局管理器:
BorderLayout
FlowLayout
GridLayout
CardLayout
GridBagLayout
布局管理器:
import java.awt.*;
class FrameTest
{
publicstatic void main(String[] args)
{
Framef = new Frame("laichunbin");
f.setSize(600,400);
f.setBackground(Color.DARK_GRAY);
f.setLayout(newFlowLayout());
f.setLayout(new GridLayout(2,3));
Buttonbtn1 = new Button("北方");
Buttonbtn2 = new Button("南方");
Buttonbtn3 = new Button("西方");
Buttonbtn4 = new Button("东方");
Buttonbtn5 = new Button("中部");
f.add(btn1,BorderLayout.NORTH);
f.add(btn2,BorderLayout.SOUTH);
f.add(btn3,BorderLayout.EAST);
f.add(btn4,BorderLayout.WEST);
f.add(btn5,BorderLayout.CENTER);
f.setVisible(true);
}
}
增加窗口监听事件
实现WindowListener接口,通过Frame.addWindowListener()来添加窗口监听器
import java.awt.*;
import java.awt.event.*;
class FrameTest
{
publicstatic void main(String[] args)
{
Framef = new Frame("laichunbin");
f.setSize(600,400);
f.setBackground(Color.DARK_GRAY);
f.setLayout(newGridLayout(2,3));
Buttonbtn1 = new Button("北方");
Buttonbtn2 = new Button("南方");
Buttonbtn3 = new Button("西方");
Buttonbtn4 = new Button("东方");
Buttonbtn5 = new Button("中部");
f.add(btn1,BorderLayout.NORTH);
f.add(btn2,BorderLayout.SOUTH);
f.add(btn3,BorderLayout.EAST);
f.add(btn4,BorderLayout.WEST);
f.add(btn5,BorderLayout.CENTER);
f.setVisible(true);
f.addWindowListener(newMyListener());
}
}
class MyListener implements WindowListener
{
publicvoid windowOpened(WindowEvent e)
{
System.out.println("窗口首次可见");
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
public void windowClosed(WindowEvent e)
{
System.out.println("窗口已经关闭");
}
public void windowDeiconified(WindowEvent e)
{
System.out.println("窗口从最小化状态变为正常状态");
}
public void windowIconified(WindowEvent e)
{
System.out.println("窗口从正常状态变为最小化状态时调用");
}
public voidwindowActivated(WindowEvent e)
{
System.out.println("SystemActivated");
}
public void windowDeactivated(WindowEvent e)
{
System.out.println("SystemDeactivated");
}
}
AWT事件模型
先把Frame设置布局管理器为2*2的网格状布局,再在添加四个Panel,每个Panel里面又又采用流式布局和框架布局,网格布局以及卡片布局。
Panel缺省的就是FlowLayout
Frame缺省是BorderLayout,调用add将会添加到中心文本域
代码如下:
import java.awt.*;
import java.awt.event.*;
class MyFrame extends Frame
{
PanelflowPannel;
PanelborderPannel;
PanelgridPannel;
PanelcardPannel;
MyFrame(Stringtitle)
{
super(title);
setSize(600,400);
setBackground(newColor(255,0,255));
setLayout(newGridLayout(2,2));
setBorderPanel();//每一个平面设置布局,然后加上按钮
setFlowPanel();
setGridPannel();
setCardPannel();
add(flowPannel);//把四个平面加到Frame里面
add(borderPannel);
add(gridPannel);
add(cardPannel);
}
privatevoid setBorderPanel()
{
borderPannel= new Panel();
borderPannel.setLayout(newBorderLayout());
Buttonbtn1 = new Button("北方");
Buttonbtn2 = new Button("南方");
Buttonbtn3 = new Button("西方");
Buttonbtn4 = new Button("东方");
Buttonbtn5 = new Button("中部");
borderPannel.add(btn1,BorderLayout.NORTH);
borderPannel.add(btn2,BorderLayout.SOUTH);
borderPannel.add(btn3,BorderLayout.EAST);
borderPannel.add(btn4,BorderLayout.WEST);
borderPannel.add(btn5,BorderLayout.CENTER);
}
privatevoid setFlowPanel()
{
flowPannel= new Panel();
flowPannel.setLayout(newFlowLayout());
Buttonbtn1 = new Button("神马");
Buttonbtn2 = new Button("浮云");
Buttonbtn3 = new Button("屌丝");
Buttonbtn4 = new Button("失足");
flowPannel.add(btn1);
flowPannel.add(btn2);
flowPannel.add(btn3);
flowPannel.add(btn4);
}
privatevoid setGridPannel()
{
gridPannel= new Panel();
gridPannel.setLayout(newGridLayout(2,2));
Buttonbtn1 = new Button("牛逼");
Buttonbtn2 = new Button("文艺");
Buttonbtn3 = new Button("二逼");
Buttonbtn4 = new Button("苦逼");
gridPannel.add(btn1);
gridPannel.add(btn2);
gridPannel.add(btn3);
gridPannel.add(btn4);
}
privatevoid setCardPannel()
{
cardPannel= new Panel();
cardPannel.setLayout(newCardLayout());
Buttonbtn1 = new Button("红心A");
Buttonbtn2 = new Button("梅花J");
cardPannel.add(btn1);
cardPannel.add(btn2);
}
publicstatic void main(String[] args)
{
MyFramemf = new MyFrame("布局管理器");
mf.setVisible(true);
}
}
按钮事件响应:
按钮事件必须产生实现ActionListener接口中的void actionPerformed(ActionEvent e)方法
获取事件源,可以调用getSource()来获取
Button btn5 = new Button("中部");
btn5.addActionListener(newActionListener()
{
publicvoid actionPerformed(ActionEvent e)
{
((Button)e.getSource()).setLabel("日出东方");
}
}
);
CardLayout实现翻牌效果:
private void setCardPannel()
{
cardPannel= new Panel();
finalCardLayout cl = new CardLayout();
cardPannel.setLayout(cl);
Buttonbtn1 = new Button("红心A");
Buttonbtn2 = new Button("梅花J");
ActionListeneral = new ActionListener()
{
publicvoid actionPerformed(ActionEvent e)
{
cl.next(cardPannel);
}
};
btn1.addActionListener(al);
btn2.addActionListener(al);
cardPannel.add(btn1);
cardPannel.add(btn2);
}
翻牌效果主要是利用next函数,把牌堆里的下一张卡片放到指定的容器里面
这个动作的发生放在监听事件发现单击事件的时候
如果内部类要引用局部变量,那么需要将这个局部变量声明为final
ActionListenr al = new ActionListener()
这本来是一个接口无法实例化,但是可以在后面加上这个接口的实现
ActionListener al = new ActionListener()
{
publicvoid actionPerformed(ActionEvent e)
{
cl.next(cardPannel);
}
};
就变成了一个匿名类,赋值给一个接口变量
创建菜单栏
菜单栏 MenuBar
菜单 Menu
菜单项 MenuItem
分别对应三个类
Framef = new Frame("菜单管理");
f.setSize(600,400);
MenuBarmb = new MenuBar();//创建一个菜单栏
Menum1 = new Menu("File");//创建两个菜单,并指定菜单的名称
Menum2 = new Menu("Edit");
MenuItemmi1 = new MenuItem("Open");//创建7个菜单项
MenuItemmi2 = new MenuItem("New");
MenuItemmi3 = new MenuItem("Find");
MenuItemmi4 = new MenuItem("Exit");
MenuItemmi5 = new MenuItem("COPY");
MenuItemmi6 = new MenuItem("Paste");
MenuItemmi7 = new MenuItem("Open");
m1.add(mi1);//添加菜单项
m1.add(mi2);
m1.add(mi3);
m1.add(mi4);
m2.add(mi5);
m2.add(mi6);
m2.add(mi7);
mb.add(m1);
mb.add(m2);
f.setMenuBar(mb);//设置菜单栏
f.setVisible(true);
为菜单添加事件响应
首先让一个容器addActionListener事件,自己创建一个ActionListener事件,TextArea有一个Append方法,往里面添加数据,传入参数为字符串;
TextFiled文本域,只能输入一行字符串;
final Frame f = new Frame("菜单管理");
f.setSize(600,400);
finalTextArea ta = new TextArea("请输入文本");//add TextArea to Frame,otherwise it willnot displat TextArea;
f.add(ta);//声明了一个文本域,记得添加到框架上,否则还是显示不了
MenuBarmb = new MenuBar();
Menum1 = new Menu("File");
Menum2 = new Menu("Edit");
MenuItemmi1 = new MenuItem("Open");
mi1.addActionListener(new ActionListener()//为菜单项1添加事件响应
{
publicvoid actionPerformed(ActionEvent e)
{
try
{
FileDialog fd = new FileDialog(f,"打开文件",FileDialog.LOAD);//打开对话框
//fd.setVisible(true);
String strFile =fd.getDirectory()+fd.getFile();
FileInputStream fis = newFileInputStream(strFile);
byte[] b = new byte[10*1024];
int len = fis.read(b,0,10*1024);//这里仅仅以字节为单位
ta.append(new String(b,0,len));
fis.close();
}
catch(Exceptionex)
{
ex.printStackTrace();
}
ta.setVisible(true);
}
}
);
MenuItemmi2 = new MenuItem("New");
MenuItemmi3 = new MenuItem("Find");
MenuItemmi4 = new MenuItem("Exit");
MenuItemmi5 = new MenuItem("COPY");
MenuItemmi6 = new MenuItem("Paste");
MenuItemmi7 = new MenuItem("Open");
m1.add(mi1);
m1.add(mi2);
m1.add(mi3);
m1.add(mi4);
m2.add(mi5);
m2.add(mi6);
m2.add(mi7);
mb.add(m1);
mb.add(m2);
f.setMenuBar(mb);
f.setVisible(true);
- java无难事笔记(十)
- java无难事笔记(一)
- java无难事笔记(二)
- java无难事笔记(五)
- java无难事笔记(三)
- java无难事笔记(四)
- java无难事笔记(六)
- java无难事笔记(七)
- java无难事笔记(八)
- java无难事笔记(九)
- 孙鑫JAVA无难事第一节课
- 孙鑫JAVA无难事第二节课
- 孙鑫java无难事下载地址
- JAVA无难事-孙鑫下载地址
- java程序设计--孙鑫java无难事Lesson10《Java图形界面编程》
- java程序设计--孙鑫java无难事Lesson7《多线程》
- java程序设计--孙鑫java无难事Lesson8《集合类》
- java程序设计--孙鑫java无难事Lesson9《IO操作》
- 假如美国退出刺激计划
- 多项式求和
- 图解数据结构(5)——散列法及哈希表
- 瀑布流布局浅析
- 无线通信FPGA设计之2-ASK调制和解调的Verilog实现
- java无难事笔记(十)
- FLV文件格式解析
- Poj 1190 生日蛋糕//回溯,减枝
- iniparser示例程序
- CSS十八条技总结
- 代理服务器-CCProxy
- java设计模式---合成模式2
- OJ6
- 概率论03 条件概率