how2j.cn


工具版本兼容问题
java的图形界面中,容器是用来存放 按钮,输入框等组件的。

窗体型容器有两个,一个是JFrame,一个是JDialog


本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



3分27秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器



步骤 1 : JFrame   
步骤 2 : JDialog   
步骤 3 : 模态JDialog   
步骤 4 : 窗体大小不可变化   
步骤 5 : 练习-模态与大小变化   
步骤 6 : 答案-模态与大小变化   

JFrame是最常用的窗体型容器,默认情况下,在右上角有最大化最小化按钮
JFrame
package gui; import javax.swing.JButton; import javax.swing.JFrame; public class TestGUI { public static void main(String[] args) { //普通的窗体,带最大和最小化按钮 JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(null); JButton b = new JButton("一键秒对方基地挂"); b.setBounds(50, 50, 280, 30); f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
JDialog也是窗体型容器,右上角没有最大和最小化按钮
JDialog
package gui; import javax.swing.JButton; import javax.swing.JDialog; public class TestGUI { public static void main(String[] args) { //普通的窗体,带最大和最小化按钮,而对话框却不带 JDialog d = new JDialog(); d.setTitle("LOL"); d.setSize(400, 300); d.setLocation(200, 200); d.setLayout(null); JButton b = new JButton("一键秒对方基地挂"); b.setBounds(50, 50, 280, 30); d.add(b); d.setVisible(true); } }
当一个对话框被设置为模态的时候,其背后的父窗体,是不能被激活的,除非该对话框被关闭
package gui; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("外部窗体"); f.setSize(800, 600); f.setLocation(100, 100); // 根据外部窗体实例化JDialog JDialog d = new JDialog(f); // 设置为模态 d.setModal(true); d.setTitle("模态的对话框"); d.setSize(400, 300); d.setLocation(200, 200); d.setLayout(null); JButton b = new JButton("一键秒对方基地挂"); b.setBounds(50, 50, 280, 30); d.add(b); f.setVisible(true); d.setVisible(true); } }
步骤 4 :

窗体大小不可变化

edit
通过调用方法 setResizable(false); 做到窗体大小不可变化
package gui; import javax.swing.JButton; import javax.swing.JFrame; public class TestGUI { public static void main(String[] args) { JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(null); JButton b = new JButton("一键秒对方基地挂"); b.setBounds(50, 50, 280, 30); f.add(b); // 窗体大小不可变化 f.setResizable(false); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
步骤 5 :

练习-模态与大小变化

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
首先设计一个JFrame,上面有一个按钮,文字是 "打开一个模态窗口"。

点击该按钮后,随即打开一个模态窗口。

在这个模态窗口中有一个按钮,文本是 "锁定大小", 点击后,这个模态窗口的大小就被锁定住,不能改变。 再次点击,就回复能够改变大小
练习-模态与大小变化
步骤 6 :

答案-模态与大小变化

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

1分31秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


package gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; public class TestGUI { public static void main(String[] args) { //普通的窗体,带最大和最小化按钮 JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(null); JButton b = new JButton("打开一个模态窗口"); b.setBounds(50, 50, 280, 30); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JDialog d = new JDialog(f); d.setTitle("这是一个模态窗口"); d.setModal(true); d.setSize(200, 150); d.setLocationRelativeTo(f); JButton b =new JButton("锁定大小"); d.add(b); b.addActionListener(new ActionListener() { boolean resizable = false; @Override public void actionPerformed(ActionEvent e) { d.setResizable(resizable); resizable = !resizable; b.setText(resizable?"解锁大小":"锁定大小"); } }); d.setVisible(true); } }); f.add(b); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2020-03-26 模态与大小变化
java小白126




交作业
package 图形界面;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestDialog {
	public static void main(String[] args) {
		JFrame f=new JFrame("外部窗体");
		f.setSize(800,700);
		f.setLocation(200,200);
		f.setLayout(null);
		
		JLabel l=new JLabel();
		JButton b=new JButton("打开一个模态窗口");
		b.setBounds(100,100,200,50);
		b.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				JDialog d=new JDialog(f);
				d.setSize(400,300);
				d.setBounds(400,400,200,200);
				d.setModal(true);
				
				JLabel l1=new JLabel();
				JButton b1=new JButton("锁定大小");
				l1.setBounds(50,50,100,30);
				b1.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent e) {
						if(b1.getText().equals("锁定大小")) {
							d.setResizable(false);
							b1.setText("解锁大小");
						}else if(b1.getText().equals("解锁大小")) {
							d.setResizable(true);
							b1.setText("锁定大小");
						}
					}
				});
				d.add(b1);
				d.setVisible(true);
			}
		});
		f.add(l);
		f.add(b);
		f.setVisible(true);
		
	}

}

							


5 个答案

1|1|1|1
答案时间:2020-06-25
原来visiable要放在监听器后面才能起作用

天机不可泄露
答案时间:2020-06-08
逆风刑云
答案时间:2020-06-07
答案

gugubird
答案时间:2020-05-09
lin1
答案时间:2020-04-24
交作业



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2020-03-24 我发现,我并不能通过setBounds来改变第一个窗口中按钮的位置,,,
luyaoz




作业 但是第一个窗口的按钮位置我改了好多数,就是不行
加载中
package gui;
import javax.swing.*;
import java.awt.event.ActionEvent;

public class TestJDialog {
    public static void main(String[] args) {
        JFrame f = new JFrame("外部窗体");
        f.setSize(800, 600);
        f.setLocation(120, 100);
        JButton c = new JButton("打开一个模态窗口");
        c.setBounds(200, 80, 200, 300);
        f.add(c);
        c.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 根据外部窗体实例化JDialog
                JDialog d = new JDialog(f);
                // 设置为模态
                d.setModal(true);

                d.setTitle("模态的对话框");
                d.setSize(400, 300);
                d.setLocation(200, 200);
                d.setLayout(null);
                JButton b = new JButton("锁定大小");
                b.setBounds(50, 50, 280, 30);
                b.addActionListener(new AbstractAction() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if(b.getText()=="解锁大小")
                        {
                            b.setText("锁定大小");d.setResizable(true);

                        }
                        else if(b.getText()=="锁定大小")
                        {
                            b.setText("解锁大小");d.setResizable(false);
                        }

                    }
                });
                d.add(b);

                d.setVisible(true);
            }
        });

        f.setVisible(true);



    }
}

							


2 个答案

1|1|1|1
答案时间:2020-06-25
楼上说的对,加上layout null就行

12313212332
答案时间:2020-03-25
JFrame没有用layout方法,自己去看站长的代码



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-11-12 模态
2019-09-30 模态与大小变化
2019-07-17 为什么模态窗口中的按钮没有边框效果????既定在正中间吗?


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 5 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-图形界面-容器 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 745032160
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图