JavaGUI常用窗体组件与面板使用详解
头秃小程 人气:01.常用的窗体
1.概述
Swing组件通常被称作“轻量级组件”,它完全由Java编写,不依赖操作系统语言。
类继承关系
JavaSwing组件间的继承关系
JComponent 是swing组件存放的位置,常见的组件如下:
2.JFrame
JFrame是一个容器,它是各个组件的载体,在开发的过程中,我们通过继承 java.swing。JFrame 来创建要的窗体
1.新建JFrame对象
JFrame()创建没有标题窗口
Frame(String s)创建标题为s的窗口
2.设置JFrame的大小
public void setSize(int width,int height) 设置窗口的大小 public void setLocation(int x,int y) 设置窗口的位置,默认位置是(0,0) public void setBounds(int a,int b,int width,int height) 设置窗口的初始值位置是(a,b),窗口的宽是width,高是height public void setVisible(boolean b) 设置窗口是否可见,窗口默认是不可见的 public void setResizable(boolean b) 设置窗口是否可调节大小,默认是可调整大小 public void dispose() 撤销当前窗口,并释放当前窗口所使用的资源 public void setExtendedState(int state) 设置窗口的扩展状态,其中参数state取JFrame类中的下列类常量: MAXIMIZED_HORIZ(水平方向最大化) MAXIMIZED_VERT(垂直方向最大化) MAXIMIZED_BOTH(水平、垂直方向都最大化)
3.设定JFrame
import javax.swing.*;//导入swing这个包的所有类和接口 public class A { public static void main(String[] args){ JFrame jf=new JFrame("hello"); // jf.setSize(400,300); // jf.setLocation(600,350); jf.setBounds(600,350,400,300); jf.setVisible(true);//设置框架是否可见,true为可见,默认不可见。所以一定要写!!!! jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭方式(直接关闭应用程序),也可以写成JFrame.EXIT_ON_CLOSE } }
import javax.swing.*;
这是java导入包的语法,表示导入swing这个包的所有类和接口
swing是图形可视包,导入这个包后才能进行GUI图形化软件的开发
import 代表“引入”
javax.swing 代表“路径” (在javax文件夹下的swing文件夹)
* 代表“全部”
3.JDialog
继承自 java.awt.Dialog 类。它是从一个窗体弹出来的另外一个窗体,它和Frame类似,需要调用 getContentPane 将窗体转换为容器,然后在容器中设置窗体的内存
JDialog:可当成——JFrame使用,但必须从属于JFrame
构造函数
JDialog(); JDialog(Frame f);//指定父窗口 JDailog(Frame f,String title);//指定父窗口 + 标题
关闭方式比JFrame少一种:
import javax.swing.*;//导入swing这个包的所有类和接口 public class A { public static void main(String[] args){ JFrame jf=new JFrame("hello"); // jf.setSize(400,300); // jf.setLocation(600,350); jf.setBounds(600,350,400,300); jf.setVisible(true);//设置框架是否可见,true为可见,默认不可见。所以一定要写!!!! jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭方式(直接关闭应用程序),也可以写成JFrame.EXIT_ON_CLOSE JDialog jd=new JDialog(jf,"JDailog"); jd.setBounds(700,450,200,150); jd.setVisible(true); jd.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } }
2.常用的面板
面板也是一种swing容器,它可以作为容器添加容纳其他的组件,但是他自己必须被加在一个容器内
1.JPanel
JPanel 就是一种最简单的面板,他继承 java.awt.Contaniner 类
import javax.swing.*; import java.awt.*; public class B { public static void main(String[] args){ JFrame jf=new JFrame("JPanel"); jf.setBounds(600,350,600,500); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton jb1=new JButton("按钮1"); JButton jb2=new JButton("按钮2"); JPanel jp=new JPanel(new FlowLayout()); jp.setPreferredSize(new Dimension(100,60));//这串代码好像并没有体现,不知道什么原因 jp.setBackground(Color.gray); jf.add(jp); jp.add(jb1); jp.add(jb2); } }
修改代码
import javax.swing.*; import java.awt.*; public class B { public static void main(String[] args){ JFrame jf=new JFrame("JPanel"); jf.setBounds(300,350,500,500); jf.setLayout(null); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton jb1=new JButton("按钮1"); JButton jb2=new JButton("按钮2"); JPanel jp=new JPanel(new FlowLayout()); jp.setBounds(100,100,300,300); jp.setBackground(Color.gray); jf.add(jp); jp.add(jb1); jp.add(jb2); } }
还是想有大佬可以指点一下问题的原因
2.JScrollPane
JScrollPane是带滚动条的面板。因此,在碰到需要将一个达到组件放到一个小较小的空间的时候,使用该面板,JScollPane 内只能添加一个个组件;因此,如果需要将多个组件添加到一个JScollPane 中时,需要添加的组件添加到 JPanel 中,再将 JPanel 添加到 JScollPane 中
import javax.swing.*; import java.awt.*; public class JScrollpane { public static void main (String[] args){ JFrame jf=new JFrame("JScollPane"); jf.setBounds(500,500,500,200); JButton jb=new JButton("香蕉"); JButton jb2=new JButton("苹果"); JButton jb3=new JButton("菠萝蜜"); jb.setPreferredSize(new Dimension(300,300)); JPanel jp=new JPanel(); jp.add(jb); jp.add(jb2); jp.add(jb3); JScrollPane js=new JScrollPane(jp); jf.add(js); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
补充:
JButton在FlowLayout、BorderLayout等一些布局中使用setSize()设置大小无法生效的,可以使用setPreferredSize方法进行设置
使用布局管理器时,使用setPreferredSize方法:
jbutton.setPreferredSize(new Dimension(w,h));
使用绝对布局时:
jbutton.setBounds(x,y,w,h);
加载全部内容