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  姿势不对,事倍功半! 点击查看做练习的正确姿势
首先设计一个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公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2021-10-12 练习 - 模态与大小变化
莫諾




首先设计一个JFrame,上面有一个按钮,文字是 "打开一个模态窗口"。 点击该按钮后,随即打开一个模态窗口。 在这个模态窗口中有一个按钮,文字是 "锁定大小", 点击后,这个模态窗口的大小就被锁定住,不能改变。 再次点击,就回复能够改变大小
加载中
JFrame f = new JFrame("KoKo");
		f.setSize(400, 300);
		f.setLocation(200, 200);
		f.setLayout(null);
		JButton b = new JButton("打开一个模态窗口");
		b.setBounds(50, 50, 280, 30);
		JButton c = new JButton("锁定大小");
		c.setBounds(80, 30, 90, 30);
		
		f.add(b);
		
		JDialog d = new JDialog(f);
		d.setModal(true);		
		d.setTitle("模态的对话框");
		d.setSize(260, 120);
		d.setLocation(270, 320);
		d.setLayout(null);		
		d.add(c);
		
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
		
		b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                d.setVisible(true);
            }
        });
		c.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
                if (c.getText() == "锁定大小") {
            		d.setResizable(false);
                    c.setText("解锁大小");
                } else if(c.getText() == "解锁大小") {
                	d.setResizable(true);
                    c.setText("锁定大小");
                }
            }
        });	

							





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





2021-04-30 打卡
KADZTT




日常打卡
package com.ztalx.gui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Random;

public class MainGUI extends JFrame {
    private File file = new File("sizeAndLocation.txt");
    public MainGUI(){

    }
    public MainGUI(String name){
        super(name);
        isFileYesOrNo(file);//创建文件
        locationWindowSize();//初始化窗口位置
        writerXANDY(file,3000);//更新本地文件位置信息
        setSize(600,600);
        //imageBtnDisplayAndHide();//这个是点击显示隐藏图片方法
        //imageKeyDownUpAndDownAndLeftAndRight();
        //imageMouseXandY();
        dialogModal(this);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    /**
     * 模态窗口练习
     */
    public void dialogModal(JFrame j){
        JButton btn1 = new JButton("打开模态窗口");
        btn1.setBounds(200,50,200,100);
        add(btn1);
        btn1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                JDialog jDialog = new JDialog(j);
                jDialog.setTitle("模态");
                jDialog.setModal(true);
                jDialog.setBounds(200,200,400,400);
                JButton btn2 = new JButton("锁定大小");
                btn2.setSize(200,200);
                jDialog.add(btn2);
                btn2.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent actionEvent) {
                        if(jDialog.isResizable()){
                            jDialog.setResizable(false);
                            btn2.setText("解锁大小");
                        }else{
                            jDialog.setResizable(true);
                            btn2.setText("锁定大小");
                        }
                    }
                });

                jDialog.setVisible(true);
            }
        });
    }

    /**
     * 当鼠标进入图片随机跳转
     */
    public void imageMouseXandY(){
        ImageIcon img = new ImageIcon("C:\\Users\\Administrator\\Downloads\\shana_heiheihei.png");
        JLabel jLabel = new JLabel();
        jLabel.setIcon(img);
        jLabel.setBounds(0,0,img.getIconWidth(),img.getIconHeight());
        add(jLabel);
        jLabel.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent mouseEvent) {

            }

            @Override
            public void mousePressed(MouseEvent mouseEvent) {

            }

            @Override
            public void mouseReleased(MouseEvent mouseEvent) {

            }

            @Override
            public void mouseEntered(MouseEvent mouseEvent) {
                Random r = new Random();

                int x = r.nextInt(getWidth() - jLabel.getWidth());
                int y = r.nextInt(getHeight() - jLabel.getHeight());

                jLabel.setLocation(x, y);
            }

            @Override
            public void mouseExited(MouseEvent mouseEvent) {

            }
        });
    }
    /**
     * 通过按键实现图片移动的方法
     */
    public void imageKeyDownUpAndDownAndLeftAndRight(){
        ImageIcon imageIcon = new ImageIcon("C:\\Users\\Administrator\\Downloads\\shana.png");
        JLabel jLabel = new JLabel();
        jLabel.setIcon(imageIcon);
        jLabel.setBounds(0,0,imageIcon.getIconWidth(), imageIcon.getIconHeight());
        add(jLabel);
        addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent keyEvent) {
                switch (keyEvent.getKeyChar()){
                    case 'a':
                        jLabel.setLocation(jLabel.getX()-4,jLabel.getY());
                        break;
                    case 'd':
                        jLabel.setLocation(jLabel.getX()+4,jLabel.getY());
                        break;
                    case 'w':
                        jLabel.setLocation(jLabel.getX(),jLabel.getY()-4);
                        break;
                    case 's':
                        jLabel.setLocation(jLabel.getX(),jLabel.getY()+4);
                        break;
                    default:
                        System.out.println(keyEvent);
                        System.out.println("无效按键"+keyEvent.getKeyChar()+keyEvent.getKeyCode());
                }
            }

            @Override
            public void keyPressed(KeyEvent keyEvent) {
            }

            @Override
            public void keyReleased(KeyEvent keyEvent) {
            }
        });
    }
    /**
     * 这个是点击显示隐藏图片方法
     */
    public void imageBtnDisplayAndHide(){
        ImageIcon img = new ImageIcon("C:\\Users\\Administrator\\Downloads\\shana.png");
        JLabel jLabel = new JLabel();
        jLabel.setIcon(img);
        jLabel.setBounds(0,0,img.getIconWidth(),img.getIconHeight());
        add(jLabel);
        JButton gbk = new JButton("隐藏图片");
        gbk.setBounds(200,200,100,50);
        if(gbk != null){
            gbk.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent actionEvent) {
                    if(jLabel.isVisible()){
                        jLabel.setVisible(false);
                        gbk.setText("显示图片");
                    }else{
                        jLabel.setVisible(true);
                        gbk.setText("隐藏图片");
                    }
                }
            });
            add(gbk);
        }
    }

    /**
     * 判断文件是否存在,如果存在,不做响应,如果不存在,则创建
     * @param file 要创建的路径
     */
    public void isFileYesOrNo(File file){
        try {
            file.createNewFile();
        } catch (IOException e) {
            System.out.println("没有文件,创建");
        }
    }

    /**
     * 初始化窗口值 如果文件没有位置信息,则默认300、300
     */
    public void locationWindowSize(){
        BufferedReader is = null;
        String x;
        String y;
        try {
            is = new BufferedReader(new FileReader(file));
            x = is.readLine();
            y = is.readLine();
            if(x != null && y != null){
                try{
                    setLocation(Integer.parseInt(x),Integer.parseInt(y));
                }catch (Exception e){
                    System.out.println("本地文件参数非法");
                    setLocation(300,300);
                }
            }else{
                setLocation(300,300);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(is != null){
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 每隔多少毫秒更新文件位置信息
     * @param l 毫秒
     */
    public void writerXANDY(File file,long l){
        new Thread(){
            @Override
            public void run() {

                try {
                    FileWriter os = null;
                    while (true){
                        Thread.sleep(l);
                        try {
                            os = new FileWriter(file);
                            os.write(new String((getX()+"").getBytes(),"UTF-8"));
                            os.write("\n");
                            os.write(new String((getY()+"").getBytes(),"UTF-8"));
                            os.write("\n");
                            System.out.println("当前坐标=  X: "+getX()+"  Y: " + getY());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }finally {
                            if(os != null){
                                os.close();
                            }
                        }
                    }
                } catch (IOException | InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}

							





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





2021-04-14 重新写一下
2021-03-31 回答
2021-02-25 打卡_大小变化


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

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

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

上传截图