单击按钮时调整框架大小

时间:2017-05-06 19:53:48

标签: java swing intellij-idea jframe

我最近开始学习Java课程以熟悉编程。很抱歉,如果这似乎是一个愚蠢的问题。我想要做的是在单击按钮时调整窗口大小。

代码说的更多的话:

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

public class GrowShrink extends JFrame implements ActionListener {
    public GrowShrink(String title) throws HeadlessException {
        super(title);

        setLayout(new GridBagLayout());
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JButton buttonGrow = new JButton("Grow");
        JButton buttonShrink = new JButton("Shrink");
        buttonGrow.addActionListener(this);
        buttonShrink.addActionListener(this);
        add(buttonGrow);
        add(buttonShrink);
        pack();
        setSize(300, 300);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("Grow")) {
            getContentPane().setSize(600, 600);
            getContentPane().doLayout();
//            getContentPane().repaint();
        } else if (e.getActionCommand().equals("Shrink")) {
            getContentPane().setSize(200, 200);
//            getContentPane().revalidate();
            repaint();
        }
    }

    public static void main(String[] args) {
        GrowShrink growShrink = new GrowShrink("Grow and Shrink the frame");
    }
}

当我按照IntelliJ的调试器操作时,在单击600x600按钮后检查hightwidth时,我可以清楚地看到尺寸已变为Grow。但是,这似乎对窗口没有任何作用。

我在这里遗漏了什么吗?我曾尝试使用repaint()doLayout()revalidate(),但没有成功。

1 个答案:

答案 0 :(得分:3)

  

我尝试做的是在点击按钮时调整窗口大小。

您的代码正在设置内容窗格的大小,而不是框架。所以你需要在框架上调用setSize(...)

  

我在这里遗漏了什么吗?我尝试过repaint(),doLayout()和revalidate(),但没有成功。

Swing使用布局管理器。布局管理器负责主要根据"首选"设置组件的大小和位置。组件的大小和添加到面板的组件。

调用revalidate()将调用布局管理器,但是没有什么会改变,因为添加到面板的组件的首选大小没有改变。

如果在执行revalidate()时内容窗格的首选大小确实发生了变化,那么您仍然需要在框架上调用pack()以利用重新计算的首选大小。