目录
- 1.常用的窗体
- 1.概述
- 2.JFrame
- 1.新建JFrame对象
- 2.设置JFrame的大小
- 3.设定JFrame
- 3.JDialog
- 2.常用的面板
- 1.JPanel
- 2.JScrollPane
1.常用的窗体
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) | |
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(,300); | |
// jf.setLocation(,350); | |
jf.setBounds(,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(,300); | |
// jf.setLocation(,350); | |
jf.setBounds(,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(,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(,350,600,500); | |
jf.setVisible(true); | |
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
JButton jb=new JButton("按钮1"); | |
JButton jb=new JButton("按钮2"); | |
JPanel jp=new JPanel(new FlowLayout()); | |
jp.setPreferredSize(new Dimension(,60));//这串代码好像并没有体现,不知道什么原因 | |
jp.setBackground(Color.gray); | |
jf.add(jp); | |
jp.add(jb); | |
jp.add(jb); | |
} | |
} |
修改代码
import javax.swing.*; | |
import java.awt.*; | |
public class B { | |
public static void main(String[] args){ | |
JFrame jf=new JFrame("JPanel"); | |
jf.setBounds(,350,500,500); | |
jf.setLayout(null); | |
jf.setVisible(true); | |
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
JButton jb=new JButton("按钮1"); | |
JButton jb=new JButton("按钮2"); | |
JPanel jp=new JPanel(new FlowLayout()); | |
jp.setBounds(,100,300,300); | |
jp.setBackground(Color.gray); | |
jf.add(jp); | |
jp.add(jb); | |
jp.add(jb); | |
} | |
} |
还是想有大佬可以指点一下问题的原因
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,200); | |
JButton jb=new JButton("香蕉"); | |
JButton jb=new JButton("苹果"); | |
JButton jb=new JButton("菠萝蜜"); | |
jb.setPreferredSize(new Dimension(,300)); | |
JPanel jp=new JPanel(); | |
jp.add(jb); | |
jp.add(jb); | |
jp.add(jb); | |
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);