最近在做这个GUI桌面设计,一直没时间写,今天来看顶级容器Jframe和JDialog,所谓顶级容器,当然,这里的JFrame继承AET中的Frame。直接学JFrame。按照我个人的理解,就是一种不可以放在其他容器,用来管理或者添加组件的一个大盒子,也就是说,这是最大号的盒子,没有更大的了,你要装的东西都只能放在这里面,不可以在外面套盒子了。这个盒子就是构建交互页面的地基。
那么作为顶级容器,这个JFrame有什么用,JFrame有什么注意的地方,JFrame和JDialog有何区别,怎么使用JFrame,首先我来介绍一下如何使用JFrame。
JFrame的使用和注意项
//实例化一个窗口
JFrame frame = new JFrame("这里是窗口标题");
//设置初始尺寸和初始位置
frame.setBounts(0,0,600,300);
//设置是否可见
frame.setVisible(true);
这里的代码比较容易理解,就是建立一个Jframe窗口,使用倒是可以容易理解,那么JFrame有什么需要注意的呢,我总结了几个我遇到的问题
1.注意窗口生命周期,就是你记得用了关掉
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 程序退出
// 或 JFrame.DISPOSE_ON_CLOSE(仅关闭窗口)
2.内存管理,后面加入事件监听的时候不要忘记释放内存,这一点要牢记,我老是忘记
3.设置布局管理器,这个后面介绍,这个布局管理器和CSS中的有点像,学过CSS的基本上一天就可以弄懂基本的布局管理。
frame.setLayout(new FlowLayout()); // 或其他布局
4.可见一定要放最后!!!这里不放最后会出现一个很大的问题,就是往里面添加的组件一开始不可见,或者直接不可见。一般是尺寸,位置,可见3步走。
上面是一些基本的注意点,到后面高阶的我现在没有学,后面补,这里初学包够了,考虑这几点就行。
JFrame的构造方法和常用方法
| 方法生命 | 解释 |
| JFrame(String title) | 这里就是构建一个标题为title的窗口 |
| setLocationRelativeTo(Component c) | 相对于C的位置,null为center |
| getContentPane() | 获取面板内容 |
| add(Component comp) | Component 添加组件到内容面板(Java5+简化版) frame.add(new JTextField()) |
| setDefaultCloseOperation(int operation) | EXIT_ON_CLOSE<br>DISPOSE_ON_CLOSE等 设置关闭按钮行为 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) |
| pack() | 计算大小,自适应 |
| setLayout(LayoutManager manager) | LayoutManager 设置布局管理器 frame.setLayout(new FlowLayout()) |
| setVisible(boolean) | 是否可见 |
太多了,我记不起来了,这里先用这些,后面在加,有网站可以看全面的,这里简单一点好了,主要理解思想。
这里给一个综合设施的代码,自己看,看不懂自己私信我,我很喜欢帮人的,嘿嘿
public class MainWindow {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("测试");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.add(new JLabel("用户名:"));
panel.add(new JTextField(20));
frame.setContentPane(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setResizable(true);
frame.setVisible(true);
}
}
JDialog的使用和注意项
一样的理解,这里我理解的JDailog就是一个弹出窗口,就是你书上所谓的对话框,就是一个绑定在JFrame的一个附加弹出窗口,在提示,确认这些消息是使用
直接上使用,其实一样,这里就注意一个东西,模态,什么是模态,就是弹出了一个程序崩溃的页面,提示你要不要重新启动,这时候有你去点那个叉窗口是关闭不了的,为啥,因为这个JDialog就是模态状态 ,也就是说,模态要你先处理弹出窗口的事件,非模态可以无视风险关闭。当然,我给你一个演示一下。
import javax.swing.*;
public class Main {
public static void main(String[] args) {
JFrame jFrame = new JFrame("标题");
jFrame.setSize(600,300);
jFrame.setVisible(true);
JDialog jDialog = new JDialog(jFrame,"窗口(模态)",true);
jDialog.setSize(200,100);
jDialog.setVisible(true);
}
}
这就是一个最简单的模态窗口,你不先关JDialog你不能操作主窗口。
下面来看注意项目
1.模态设置,一般是模态
2.父子关系,理解清楚你的JDialog到底是绑定的是谁,别搞混
3.释放
4.布局,直接pack比较简单
5.数据传递,这是最重要的
6.错误提示
JDialog的构造方法和常用方法
这里我实在不想手打了,直接AI把,不知道有没有人看我的文章,有真人的话可以给我评论一下,嘿嘿,让我也体验一把这个文章作者的感觉,
| 方法分类 | 方法签名 | 说明 | 示例 |
|---|---|---|---|
| 构造函数 | JDialog() | 创建无属主、非模态对话框 | JDialog dialog = new JDialog(); |
JDialog(Frame owner, String title, boolean modal) | 指定属主、标题和模态类型 | new JDialog(parent, "设置", true); | |
| 模态控制 | void setModal(boolean modal) | 设置是否阻塞父窗口(来自Dialog类) | dialog.setModal(true); |
void setModalityType(Dialog.ModalityType type) | 精细控制模态类型(Java 6+) | dialog.setModalityType(ModalityType.APPLICATION_MODAL); | |
| 对话框属性 | void setDefaultCloseOperation(int operation) | 设置关闭按钮行为(继承自JFrame) | dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); |
void setUndecorated(boolean undecorated) | 隐藏标题栏和边框(需在显示前调用) | dialog.setUndecorated(true); | |
| 内容操作 | Container getContentPane() | 获取内容容器(继承自JFrame) | dialog.getContentPane().add(new JButton()); |
void setContentPane(Container contentPane) | 替换内容面板 | dialog.setContentPane(new JPanel()); | |
| 显示控制 | void pack() | 根据内容自动调整窗口大小 | dialog.pack(); |
void setLocationRelativeTo(Component c) | 相对于组件居中(c=null时屏幕居中) | dialog.setLocationRelativeTo(parent); | |
| 资源管理 | void dispose() | 释放窗口资源(继承自Window类) | dialog.dispose(); |
| 父子关系 | Window getOwner() | 获取属主窗口 | Frame owner = (Frame) dialog.getOwner(); |
void setOwner(Window owner) | 动态设置属主窗口 | dialog.setOwner(newParent); | |
| 根面板操作 | protected JRootPane createRootPane() | 创建自定义根面板(可重写) | @Override protected JRootPane createRootPane() { ... } |
还得是AI,可见能力非常的nice,刚刚不应该自己写的。
ok,今天就到这里,继续学习,java迟早给他走一遍,有感兴趣前面的内容的吗?
508

被折叠的 条评论
为什么被折叠?



