首页编程swing布局 java swing布局

swing布局 java swing布局

编程之家2023-11-0774次浏览

这篇文章给大家聊聊关于swing布局,以及java swing布局对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

swing布局 java swing布局

java怎么做swing界面

swing做界面,一般需要一种基本知识:

一:关于布局的知识,常用的布局要熟悉,比如边界布局,流式布局,绝对布局,网格布局等.布局决定了组件(按钮,文本框,下拉框等)所在的位置

二:关于事件响应机制,比如点击按钮事件,如何响应.

三:一些常用的组件,按钮,文本框,下拉框,复选按钮,单选按钮,等

举例:简单的代码,实现给窗口随机更换背景色

importjava.awt.*;

swing布局 java swing布局

importjava.awt.event.*;

importjavax.swing.*;

publicclassDemoFrameextendsJFrameimplementsActionListener{

publicDemoFrame(){

JButtonjb1=newJButton("点击换背景色");//定义按钮组件

swing布局 java swing布局

jb1.addActionListener(this);//给按钮添加事件响应机制,按钮点击时执行actionPerformed方法

add(jb1);//把组件添加到窗口

setLayout(newFlowLayout());//流式布局

setTitle("Color");//窗口标题

setSize(300,200);//大小

setLocationRelativeTo(null);//居中

setDefaultCloseOperation(EXIT_ON_CLOSE);//点击关闭时退出系统

setVisible(true);//窗口可见

}

publicstaticvoidmain(String[]args){//main方法,启动窗口

newDemoFrame();//创建窗口

}

publicvoidactionPerformed(ActionEvente){//当按钮被点击时,执行下面的代码

//随机颜色,并设置成为窗口的背景色

getContentPane().setBackground(newColor((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));

}

}

java swing界面设计

GUI图形界面设计的重点是布局

SWING也是采用AWT的布局方式,进行布局管理的。(实现LayoutManager接口的方法,来进行管理布局,API中已有实现类,我们通常只需要指定实现类,而不需要自己重写方法)

常用的布局有绝对布局,边界布局BorderLayout,流布局FlowLayout,表格布局GridLayout。

JFrame等重量级组件,默认布局是边界布局,JPanel轻量级组件,默认布局是流布局

绝对布局:布局的特点,需要指定每个组件的大小,和具体位置。

优点:充分的自定义,充分的自由,可以写出漂亮的,细致的界面

缺点:绝对布局在不同的操作系统下,会有一些不同程度的变化,导致界面变形,甚至组件重叠等。在同一操作系统下,窗口放大缩小,界面也会变形

绝对布局的范例

importjavax.swing.JButton;

importjavax.swing.JFrame;

publicclassFrame1extendsJFrame{

JButtonjb1;

publicFrame1(){

setLayout(null);//指定窗口的布局管理器为空,也就是绝对布局

jb1=newJButton("按钮");

jb1.setLocation(100,50);//指定组件的位置

jb1.setSize(80,30);//指定组件的大小

//jb1.setBounds(100,50,80,30);//上面两句代码等同于这句代码

add(jb1);

setSize(300,200);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

}

publicstaticvoidmain(String[]args){

newFrame1().setVisible(true);

}

}

边界布局BorderLayout:它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多只能包含一个组件

优点:比较常用的布局,简单易掌握,放大缩小,不影响组件的位置

缺点:组件位置不够灵活。每个区域如果添加多个组件,那么后面的组件会覆盖前面的组件。(因为可以嵌套其他组件使用,所以这些缺点基本都能克服)

3.代码参考

importjavax.swing.*;

importjava.awt.*;

publicclassP004_BorderLayout{

JFramejframe;

JButtonjb1,jb2,jb3,jb4,jb5;

publicP004_BorderLayout(){

jframe=newJFrame();

jframe.setTitle("边界布局");

jframe.setBounds(300,200,180,180);

jb1=newJButton("东");

jframe.add(jb1,BorderLayout.EAST);

jb2=newJButton("西");

jframe.add(jb2,BorderLayout.WEST);

jb3=newJButton("南");

jframe.add(jb3,BorderLayout.SOUTH);

jb4=newJButton("北");

jframe.add(jb4,BorderLayout.NORTH);

jb5=newJButton("中");

jframe.add(jb5);//BorderLayout.CENTER可以省略

jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jframe.setVisible(true);

}

publicstaticvoidmain(String[]args){

newP004_BorderLayout();

}

}

流布局FlowLayout:像一排文字一个挨着一个的布局。流布局用于安排有向流中的组件,这非常类似于段落中的文本行。流的方向可以指定。

优点:可以快速添加组件,不用指定位置,也不用指定边界

缺点:线性排列,外观单调。(嵌套其他布局,可以忽略缺点)

代码参考

importjava.awt.FlowLayout;

importjavax.swing.*;

publicclassP003_FlowLayout{

JFramejframe;

publicP003_FlowLayout(){

jframe=newJFrame("流式布局");

for(inti=1;i<=5;i++){

jframe.add(newJButton(i+""));

}

jframe.setLocation(380,260);

jframe.setLayout(newFlowLayout(FlowLayout.LEFT));//窗口指定位流式布局,方向从左往右

jframe.pack();

jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jframe.setVisible(true);

}

publicstaticvoidmain(String[]args){

newP003_FlowLayout();

}

}

表格布局GridLayout:它以矩形网格形式对容器的组件进行布置。容器被分成大小相等的矩形,一个矩形中放置一个组件。

优点:组件整齐排列,

缺点:如果添加的组件数量,和指定的数量不一致,容易导致缺失等

参考代码

importjavax.swing.*;

importjava.awt.*;

publicclassP005_GridLayout{

JFramejframe;

publicP005_GridLayout(){

jframe=newJFrame("表格布局");

jframe.setLayout(newGridLayout(3,4));//表格布局,3行4列

for(inti=0;i<=12;i++){

jframe.add(newJButton(i+""));

}

jframe.setLocation(300,200);

jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

jframe.pack();

jframe.setVisible(true);

}

publicstaticvoidmain(String[]args){

newP005_GridLayout();

}

}

最后:布局是一种灵活的东西。你可以一个布局里嵌套另外一个布局。

比如边界布局的窗口的中间,加入按表格布局的组件,表格布局里面是流式布局。

很多的复杂的界面,通过细分,都能拆分成常用布局的嵌套

java swing布局

null layout不是很好,所有的东西都要自己定义,一旦窗口大小变化就要重新计算。我建议使用MigLayout。上手慢,但很强大。http://www.miglayout.com

而且,就算你要用内建的Layout Manager,还有一个GridBag Layout,比Grid Layout更强大一点。

接下来,那个边框,不是JSeparator,而是一个边框。我猜是

Border result= BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),"修改信息:");

如果是我,使用MigLayout,以上代码还是比较简单的:

importjava.awt.event.KeyEvent;

importjavax.swing.BorderFactory;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

importjavax.swing.SwingUtilities;

importjavax.swing.border.Border;

importjavax.swing.border.EtchedBorder;

importnet.miginfocom.swing.MigLayout;

publicclassMyFrameextendsJFrame{

publicMyFrame(){

begin();

}

privatevoidbegin(){

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLayout(newMigLayout("insets10,fill","[]","[]5[]"));

//firstpanel

JPanelfirst=newJPanel();

//first这个panel有5像素的边缘,2列,3行。第一列右对齐,占40%宽度;第二列默认,左对齐,占据剩余所有空间。

first.setLayout(newMigLayout("insets5,fill","[right,40%]5[fill,grow]","[]5[]5[]"));

first.setOpaque(false);

//这个面板的border有些特殊:createTitledBorder()方法的签名可以有两个:前一个是线的类型,后面一个是标题文本。

Borderresult=BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),"修改信息:");

first.setBorder(result);

//把first加到contentPane里面

add(first,"cell00,grow");

JLabeloriginal=newJLabel("输入原密码:");

JLabelnewPass=newJLabel("输入新密码:");

JLabelconfirm=newJLabel("确认新密码:");

JTextFieldorig_field=newJTextField();

JTextFieldnew_field=newJTextField();

JTextFieldconfirm_field=newJTextField();

//miglayout的核心就是网格排布。用坐标来定义添加元素的位置

first.add(original,"cell00,w100!");//addtocol0,line0,min:pref:maxwidthallsetto100

first.add(newPass,"cell01,w100!");//addtocol0,line1

first.add(confirm,"cell02,w100!");//addtocol0,line2

first.add(orig_field,"cell10,w150!");//addtocol1,line0,min:pref:maxwidthallsetto150

first.add(new_field,"cell11,w150!");//addtocol1,line1

first.add(confirm_field,"cell12,w150!");//addtocol1,line2

//按钮面板

JPanelbuttons=newJPanel();

buttons.setOpaque(false);

//边缘为5像素;有两列,中间是10像素的间距,列内元素居中;有一行,行中上下对齐也是居中

buttons.setLayout(newMigLayout("insets5,fill","[center]10[center]","[center]"));

JButtonyes=newJButton("Y.确定");

//快捷键设为虚拟键Y,得到下划线效果

yes.setMnemonic(KeyEvent.VK_Y);

JButtonquit=newJButton("Q.退出");

//快捷键设为虚拟键Q,得到下划线效果

quit.setMnemonic(KeyEvent.VK_Q);

//把yes按钮加到第一列第一行,min:pref:max的大小都设为100像素

buttons.add(yes,"cell00,w100!");

//把quit按钮加到第二列第一行,min:pref:max的大小都设为100像素

buttons.add(quit,"cell10,w100!");

//把按钮面板加到contentPane里面

add(buttons,"cell01,grow");

pack();

setBounds(0,0,500,400);

setLocationRelativeTo(null);

setVisible(true);

}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(newRunnable(){

@Override

publicvoidrun(){

MyFrameframe=newMyFrame();

}

});

}

}

效果是这样:

MigLayout还允许你使用辅助线来debug。把这一行:

first.setLayout(newMigLayout("insets5,fill","[right,40%]5[fill,grow]","[]5[]5[]"));

改成:

first.setLayout(newMigLayout("insets5,fill,debug","[right,40%]5[fill,grow]","[]5[]5[]"));

你就可以看到first面板里面的辅助线了。

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

关键词排名(SEM百度竞价中关键词排名计算公式是)成都百度推广,成都百度推广公司电话有吗