图形界面编程技术手册
编写:Kende_zhu
第一节基本容器JFrame
1、第一个JFrame窗体程序
publicclassJFrameDemo{
publicstaticvoidmain(String[]args){
JFramejf=newJFrame("这是我的第一个swing窗体");
Dimensiond=newDimension(300,200);
e(d);
Pointp=newPoint(500,400);
ation(p);
ible(true);
}
}
第二节标签组件JLabel
1、定义标签对象
publicclassJLabelDemo{
publicstaticvoidmain(String[]args){
JFramejf=newJFrame("这是我的第一个swing窗体");
JLabellab=newJLabel("KENDE",);//实例化标签对
象
(lab);//将Label组件添加到JFrame面板中
Dimensiond=newDimension(300,200);
e(d);
Pointp=newPoint(500,400);
ation(p);
ible(true);
}
}
2、定义标签字体
标签可以设置字体,包括什么字体,字体的颜色,大小,是否斜体等
publicclassJLabelDemo2{
publicstaticvoidmain(String[]args){
JFramejf=newJFrame("这是我的第一个swing窗体");
JLabellab=newJLabel("KENDE",);//实例化标签对
象
Fontfont=newFont("Dialog",+,30);
t(font);
(lab);//将组件添加到面板中
Dimensiond=newDimension(300,200);
e(d);
Pointp=newPoint(500,400);
ation(p);
ible(true);
}
}
3、得到本机中所有的字体
publicclassGetAllFonts{
publicstaticvoidmain(String[]args){
GraphicsEnvironmentg=GraphicsEnvironment
.getLocalGraphicsEnvironment();
Stringfonts[]=ilableFontFamilyNames();
for(Stringname:fonts){
n(name);
}
}
}
4、在JLabel中设置显示的图片
publicclassJLabelDemo3{
publicstaticvoidmain(String[]args){
JFramejf=newJFrame("这是我的第一个swing窗体");
Iconicon=newImageIcon("E:picBackGroud野生动物王
国.jpg");
JLabellab=newJLabel("KENDE",icon,);//实
例化标签对象
Fontfont=newFont("Serif",+,30);
t(font);
(lab);//将组件添加到面板中
Dimensiond=newDimension(300,200);
e(d);
Pointp=newPoint(500,400);
ation(p);
ible(true);
}
}
第三节按钮组件JButton
1、在JFrame中增加按钮
publicclassJButtonDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("WelcometoKende'shome!");
JButtonbt=newJButton("按钮");
(bt);
e(300,200);
ation(400,300);
ible(true);
}
}
2、往JButton中添加图片
publicclassJButtonDemo02{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("WelcometoKende'shome!");
StringpicPath="E:";
Iconicon=newImageIcon(picPath);
JButtonbt=newJButton(icon);
(bt);
e(800,500);
ation(400,300);
ible(true);
}
}
第三节菜单栏组件
publicclassIsMenuItemextendsJFrameimplementsActionListener{
privatestaticfinallongrialVersionUID=1L;
JMenuItemmiBlue=newJMenuItem("Blue");
JMenuItemmiGreen=newJMenuItem("Green");
JMenuItemmiRed=newJMenuItem("Red");
JTextFieldtfMain=newJTextField(20);
publicIsMenuItem(){
e(600,400);
aultCloOperation(_ON_CLOSE);
JMenuBarmenuBar=newJMenuBar();
JMenumenuColor=newJMenu("Color");
(menuColor);
(miBlue);
(miGreen);
(miRed);
tentPane().add(menuBar,);
JPanelpanel=newJPanel();
tentPane().add(panel,);
(tfMain);
der(LoweredBevelBorder());
ionListener(this);
ionListener(this);
ionListener(this);
ible(true);
}
publicvoidactionPerformed(ActionEvente){
if(rce()==miBlue){
kground();
}elif(rce()==miGreen){
kground();
}elif(rce()==miRed){
kground();
}
}
publicstaticvoidmain(String[]args){
newIsMenuItem();
}
}
第四节布局管理器
1、FlowLayout布局管理器
FlowLayout属于流式布局管理器,使用此种布局方式,所有的组件会像流水一样依次排列。
publicclassFlowLayoutDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
out(newFlowLayout(,20,20));
JButtonbutton=null;
for(inti=0;i<9;i++){
button=newJButton("按钮-"+i);
(button);
}
e(800,500);
ation(400,300);
ible(true);
}
}
效果图:
2、BorderLayout布局管理器
BorderLayout将一个窗体的版面划成东,西,南,北,中五个区域,可以直接将需要的组件
放到五个区域即可
publicclassBorderLayoutDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
out(newBorderLayout(20,20));
(newJButton("东"),);
(newJButton("西"),);
(newJButton("南"),);
(newJButton("北"),);
(newJButton("中"),);
e(500,300);
ation(400,300);
ible(true);
}
}
3、GridLayout布局管理器
GridLayout布局管理器是以表格的形式进行管理的,在使用此布局管理器的时候必须设置显
示的行数和列数。
publicclassGridLayoutDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
out(newGridLayout(3,5,3,3));
JButtonbutton=null;
for(inti=0;i<13;i++){
button=newJButton("按钮-"+i);
(button);
}
e(500,300);
ation(400,300);
ible(true);
}
}
效果图:
4、CardLayout布局管理器
CardLayout就是将一组组件彼此重叠的进行布局,就像一张张卡片一样,这样每次只会展现
一个界面
publicclassCardLayoutDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
CardLayoutcard=newCardLayout();
out(card);
Containercon=tentPane();
(newJLabel("标签-A",),"first");
(newJLabel("标签-B",),"cond");
(newJLabel("标签-C",),"third");
(newJLabel("标签-D",),"fourth");
(newJLabel("标签-E",),"fifth");
();
ible(true);
(con,"third");
for(inti=0;i<5;i++){
(con);
try{
(2000);
}catch(InterruptedExceptione){
tackTrace();
}
}
}
}
5、绝对定位
以上的布局管理器都是依靠专门的工具完成,在java中也可以通过绝对定位的方式完成
publicclassAbsoluteLayoutDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
out(null);
JLabeltitle=newJLabel("");
JButtonenter=newJButton("进入");
JButtonhelp=newJButton("帮助");
e(500,400);
ation(300,200);
nds(45,5,150,20);
nds(280,30,100,80);
nds(100,50,200,100);
(title);
(enter);
(help);
ible(true);
}
}
第五节其他容器
1、Jpanel
最早是在JFrame中加入组件,但是现在可以将组件加入到Jpanel中,在Jpanel中完成各个
组件的排列,之后再将所有独立的Jpanel直接放在JFrame之中,以完成复杂的图形显示。
publicclassJPanelDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
JPanelpanel=newJPanel();
(newJLabel("标签-1"));
(newJLabel("标签-2"));
(newJLabel("标签-3"));
(newJButton("按钮-X"));
(newJButton("按钮-Y"));
(newJButton("按钮-Z"));
(panel);
();
ation(300,200);
ible(true);
}
}
在开发中可以使用Jpanel完成一些复杂的界面设计。
2、JSplitPane
JSplitPane的主要作用是分割面板,可以将一个窗体分为两个子窗体,可以是水平排列也可
以是垂直排列
publicclassJSplitPaneDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
Containercont=tentPane();
JSplitPanelfsplit=new
JSplitPane(NTAL_SPLIT,
newJLabel("标签-左"),newJLabel("标签-右"));
JSplitPanetpsplit=newJSplitPane(AL_SPLIT,
lfsplit,
newJLabel("标签-下"));
iderSize(30);
iderSize(20);
TouchExpandable(true);
//(tpsplit);
(tpsplit);
();
ation(300,200);
ible(true);
}
}
3、JTabbedPane
publicclassJTabbedPaneDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
Containercont=tentPane();
JTabbedPanetab=newJTabbedPane();
JPanelpanel1=newJPanel();
JPanelpanel2=newJPanel();
(newJButton("按钮"));
(newJLabel("标签"));
("图片选项",newImageIcon("d:"),panel1,
"图片");
("文字选项",panel2);
(tab);
();
ation(300,200);
ible(true);
}
}
4、JScrollPane
在一般的图形界面中如果显示的区域不够大,往往会出现滚动条以方便用户浏览,在Swing
中JScrollPane的主要功能就是为显示的内容加入水平滚动条。
JScrollPane主要由JViewPort和JScrollBar两部分组成,前者主要是显示一个矩形的区域让
用户浏览,而后者主要是形成水平或者垂直的滚动条。
publicclassJScrollPaneDemo01{
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("Welcometokende'shome");
Containercont=tentPane();
StringpicPath="d:"+tor+"";
JLabellab=newJLabel(newImageIcon(picPath));
JPanelpanel=newJPanel();
JScrollPanescrollPane=newJScrollPane(panel,
AL_SCROLLBAR_ALWAYS,
NTAL_SCROLLBAR_ALWAYS);
(lab);
(scrollPane);
();
ation(300,200);
ible(true);
}
}
第六节事件处理
Java事件处理流程:
1、关闭窗口
在此之前的事件是无效的,窗体关闭也是无效的,如果现在要变得有效,必须加入事件处理
机制
classMyWindowEventHandleimplementsWindowListener{
publicvoidwindowActivated(WindowEvente){
n("windowActivated-->窗口被选中");
}
publicvoidwindowClod(WindowEvente){
n("windowClod-->窗口被关闭");
}
publicvoidwindowClosing(WindowEvente){
n("windowClosing-->窗口关闭");
(1);
}
publicvoidwindowDeactivated(WindowEvente){
n("windowDeactivated-->取消窗口选中");
}
publicvoidwindowDeiconified(WindowEvente){
n("windowDeiconified-->窗口从最小化恢复");
}
publicvoidwindowIconified(WindowEvente){
n("windowIconified-->窗口最小化");
}
publicvoidwindowOpened(WindowEvente){
n("windowOpened-->窗口被打开");
}
};
publicclassMyEventWindowEventJFrame01{
publicstaticvoidmain(Stringargs[]){
JFrameframe=newJFrame("WelcomeTokende'shome");
dowListener(newMyWindowEventHandle());//加入事件
e(300,150);
kground();
ation(300,200);
ible(true);
}
}
注意:发现以上程序虽然实现了窗口关闭,但是没有必要实现那么多的方法,可以如何做呢,
其实在事件中提供了很多的适配器
classMyWindowEventHandle2extendsWindowAdapter{
publicvoidwindowClosing(WindowEvente){
n("windowClosing-->窗口关闭");
(1);
}
};
publicclassMyEventWindowEventJFrame02{
publicstaticvoidmain(Stringargs[]){
JFrameframe=newJFrame("WelcomeTokende’shome");
dowListener(newMyWindowEventHandle2());//加入事件
e(300,150);
kground();
ation(300,200);
ible(true);
}
}
现在只要求一个关闭,资源太浪费了,可以使用匿名内部类的做法减少代码量
publicclassMyEventWindowEventJFrame03{
publicstaticvoidmain(Stringargs[]){
JFrameframe=newJFrame("WelcomeTokende’shome");
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
n("windowClosing-->窗口关闭");
(1);
}
});//加入事件
e(300,150);
kground();
ation(300,200);
ible(true);
}
}
2、按钮事件
如果要使得按钮有效,那么只需要使用ActionListener接口
classActionHandle{
privateJFrameframe=newJFrame("WelcomeTokende'shome");
privateJButtonbut=newJButton("显示");
privateJLabellab=newJLabel();
privateJTextFieldtext=newJTextField(10);
privateJPanelpan=newJPanel();
publicActionHandle(){
Fontfnt=newFont("Serief",+,28);
t(fnt);//设置标签的显示文字
t("等待用户输入信息!");
ionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//if(rce()instanceofJButton){}//判断是否是按钮
if(rce()==but){
t(t());
}
}
});
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
(1);
}
});//加入事件
out(newGridLayout(2,1));
out(newGridLayout(1,2));
(text);
(but);
(pan);
(lab);
();
kground();
ation(300,200);
ible(true);
}
};
publicclassMyActionEventDemo01{
publicstaticvoidmain(Stringargs[]){
newActionHandle();
}
}
完成一个简单的用户登录,用户名是kende,密码是123
classLoginCheck{
privateStringname;
privateStringpassword;
publicLoginCheck(Stringname,Stringpassword){
=name;
rd=password;
}
publicbooleanvalidate(){
if("kende".equals(name)&&"123".equals(password)){
returntrue;
}el{
returnfal;
}
}
};
classActionHandle2{
privateJFrameframe=newJFrame("WelcomeTokende'shome");
privateJButtonsubmit=newJButton("登陆");
privateJButtonret=newJButton("重置");
privateJLabelnameLab=newJLabel("用户名:");
privateJLabelpassLab=newJLabel("密码:");
privateJLabelinfoLab=newJLabel("用户登陆系统");
privateJTextFieldnameText=newJTextField(10);
privateJPasswordFieldpassText=newJPasswordField();
privateJPanelpan=newJPanel();
publicActionHandle2(){
Fontfnt=newFont("Serief",+,12);
t(fnt);//设置标签的显示文字
ionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(rce()==submit){
Stringtname=t();
Stringtpass=newString(sword());
LoginChecklog=newLoginCheck(tname,tpass);
if(te()){
t("登陆成功,欢迎光临!");
}el{
t("登陆失败,错误的用户名或密码!");
}
}
}
});
ionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(rce()==ret){
t("");
t("");
t("用户登陆系统");
}
}
});
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
(1);
}
});//加入事件
out(null);
nds(5,5,60,20);
nds(5,30,60,20);
nds(5,65,220,30);
nds(65,5,100,20);
nds(65,30,100,20);
nds(165,5,60,20);
nds(165,30,60,20);
(nameLab);
(passLab);
(infoLab);
(nameText);
(passText);
(submit);
(ret);
e(280,130);
kground();
ation(300,200);
ible(true);
}
};
publicclassMyActionEventDemo03{
publicstaticvoidmain(Stringargs[]){
newActionHandle2();
}
}
3、键盘事件
classMyKeyHandleextendsJFrameimplementsKeyListener{
privateJTextAreatext=newJTextArea();
publicMyKeyHandle(){
le("WelcomeTokende'shome");
JScrollPanescr=newJScrollPane(text);
nds(5,5,300,200);
(scr);
Listener(this);
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
(1);
}
});//加入事件
e(310,210);
ible(true);
}
publicvoidkeyPresd(KeyEvente){
("键盘“"+Text(Code())+"”键按下n");
}
publicvoidkeyRelead(KeyEvente){
("键盘“"+Text(Code())+"”键松开n");
}
publicvoidkeyTyped(KeyEvente){
("输入的内容是:"+Char()+"n");
}
};
publicclassMyKeyEventDemo01{
publicstaticvoidmain(Stringargs[]){
newMyKeyHandle();
}
}
以上的键盘事件中,类必须要实现接口中的所有方法,太麻烦,那么在swing中也提供了键
盘处理的Adapter类,直接使用此类即可。
classMyKeyHandle2extendsJFrame{
privateJTextAreatext=newJTextArea();
publicMyKeyHandle2(){
le("WelcomeTokende'shome");
JScrollPanescr=newJScrollPane(text);
nds(5,5,300,200);
(scr);
Listener(newKeyAdapter(){
publicvoidkeyTyped(KeyEvente){
("输入的内容是:"+Char()+"n");
}
});
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
(1);
}
});//加入事件
e(310,210);
ible(true);
}
};
publicclassMyKeyEventDemo02{
publicstaticvoidmain(Stringargs[]){
newMyKeyHandle2();
}
}
4、鼠标事件
classMyMouHandleextendsJFrameimplementsMouListener{
privateJTextAreatext=newJTextArea();
publicMyMouHandle(){
le("WelcomeTokende'shome");
JScrollPanescr=newJScrollPane(text);
nds(5,5,300,200);
(scr);
Listener(this);
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
(1);
}
});//加入事件
e(310,210);
ible(true);
}
publicvoidmouClicked(MouEvente){
intc=ton();
StringmouInfo=null;
if(c==1){
mouInfo="左键";
}
if(c==3){
mouInfo="右键";
}
if(c==2){
mouInfo="滚轴";
}
("鼠标单击:"+mouInfo+"n");
}
publicvoidmouEntered(MouEvente){
("鼠标进入组件。n");
}
publicvoidmouExited(MouEvente){
("鼠标离开组件。n");
}
publicvoidmouPresd(MouEvente){
("鼠标按下。n");
}
publicvoidmouRelead(MouEvente){
("鼠标松开。n");
}
};
publicclassMyMouEventDemo01{
publicstaticvoidmain(Stringargs[]){
newMyMouHandle();
}
}
鼠标中也提供了Adapter类,可以减少代码
classMyMouHandle2extendsJFrame{
privateJTextAreatext=newJTextArea();
publicMyMouHandle2(){
le("WelcomeTokende'shome");
JScrollPanescr=newJScrollPane(text);
nds(5,5,300,200);
(scr);
Listener(newMouAdapter(){
publicvoidmouClicked(MouEvente){
intc=ton();
StringmouInfo=null;
if(c==1){
mouInfo="左键";
}
if(c==3){
mouInfo="右键";
}
if(c==2){
mouInfo="滚轴";
}
("鼠标单击:"+mouInfo+"n");
}
});
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
(1);
}
});//加入事件
e(310,210);
ible(true);
}
};
publicclassMyMouEventDemo02{
publicstaticvoidmain(Stringargs[]){
newMyMouHandle2();
}
}
5、鼠标拖拽事件
在swing事件中可以使用MouMotionListener接口完成鼠标的拖拽
classMyMouMotionHandleextendsJFrame{
publicMyMouMotionHandle(){
le("WelcomeTokende'shome");
MotionListener(newMouMotionListener(){
publicvoidmouDragged(MouEvente){
n("鼠标拖拽到:X="+()+",Y="+());
}
publicvoidmouMoved(MouEvente){
n("鼠标移动到窗体。");
}
});
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
(1);
}
});//加入事件
e(310,210);
ible(true);
}
};
publicclassMyMouMotionEventDemo01{
publicstaticvoidmain(Stringargs[]){
newMyMouMotionHandle();
}
}
在程序中也本身包含了Adapter类,直接使用此类完成此功能
classMyMouMotionHandle2extendsJFrame{
publicMyMouMotionHandle2(){
le("WelcomeTokende'shome");
MotionListener(newMouMotionAdapter(){
publicvoidmouDragged(MouEvente){
n("鼠标拖拽到:X="+()+",Y="+());
}
});
dowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
(1);
}
});//加入事件
e(310,210);
ible(true);
}
};
publicclassMyMouMotionEventDemo02{
publicstaticvoidmain(Stringargs[]){
newMyMouMotionHandle2();
}
}
本文发布于:2022-11-24 17:35:10,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/13262.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |