bh6635 2017-09-27 16:12 采纳率: 0%
浏览 697

java swing 组件显示相关的问题

小白求教,下面这段代码编译运行之后,为什么需要在调整一次窗口大小之后,窗口中的按钮组件才会显示出来?


///////////////////////////////////////////////////////////
// 文件名:
//      JavaApplication2.java
///////////////////////////////////////////////////////////
// 简介:
//      简单的Java程序,通过点击按钮显示或隐藏窗口
///////////////////////////////////////////////////////////

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class JavaApplication2 {

    static JFrame window1 = new JFrame("第一个窗口");
    static JFrame window2 = new JFrame("第二个窗口");

    public static void main(String [] args) {

        Container window1_con = window1.getContentPane();
        window1.setBounds(60,100,300,150);
        window1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window1.setVisible(true);

        Container window2_con = window2.getContentPane();
        window2.setBounds(260,100,300,150);
        window2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        window2.setVisible(false);

        JButton btn1 = new JButton("打开第二个窗口");
        window1_con.add(btn1);
        // window1.pack();

        JButton btn2 = new JButton("关闭此窗口");
        window2_con.add(btn2);
        // window2.pack();

        ActionListener listener1;
        listener1 = new ReaderListen1();
        btn1.addActionListener(listener1);

        ActionListener listener2;
        listener2 = new ReaderListen2();
        btn2.addActionListener(listener2);

    }

}

class ReaderListen1 extends JavaApplication2 implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        window2.setVisible(true);
    }

}

class ReaderListen2 extends JavaApplication2 implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        window2.setVisible(false);
    }

}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-06 23:58
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于Swing框架在创建和布局容器时会自动计算并设置其大小。当你尝试将一个包含多个子组件(如按钮)的容器重新布局时,它可能会改变这些组件的大小,使得它们不再与父容器完全匹配。

    为了使按钮组件正确显示,你需要手动更新窗口大小以确保所有组件都能适应其大小。这可以通过调用window1.pack()方法来完成。这样做的目的是告诉Swing框架重新计算窗口大小,并根据所需尺寸调整各个组件的位置。

    以下是如何解决这个问题的方法:

    public static void main(String[] args) {
    
        Container window1_con = window1.getContentPane();
        window1.setBounds(60, 100, 300, 150);
        window1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window1.setVisible(true);
    
        Container window2_con = window2.getContentPane();
        window2.setBounds(260, 100, 300, 150);
        window2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        window2.setVisible(false);
    
        JButton btn1 = new JButton("打开第二个窗口");
        window1_con.add(btn1);
        // window1.pack();  // 这里可以省略
    
        JButton btn2 = new JButton("关闭此窗口");
        window2_con.add(btn2);
        // window2.pack();  // 这里也可以省略
    
        ActionListener listener1;
        listener1 = new ReaderListen1();
        btn1.addActionListener(listener1);
    
        ActionListener listener2;
        listener2 = new ReaderListen2();
        btn2.addActionListener(listener2);
    
    }
    

    现在,当您再次调整窗口大小时,所有的按钮组件都会正确显示。

    评论

报告相同问题?