如何从最小窗口大小更改JFrame大小?

时间:2016-07-16 16:44:57

标签: java swing jframe jpanel

我正在尝试学习如何使用CardLayout而不是多个JFrame,我正在搞乱我在youtube上找到的代码。我尝试在所有JPanes上调用setSize(),但它不会改变大小并保持最小窗口大小。因为这行代码我无法设置大小的原因是:“panelCont.setLayout(cl);” ?

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

public class CLayout {
    JFrame frame = new JFrame("CardLayout");
    JPanel panelCont = new JPanel();
    JPanel panelFirst = new JPanel();
    JPanel panelSecond = new JPanel();
    JButton buttonOne = new JButton("Switch to second panel");
    JButton buttonSecond = new JButton("Switch to first panel");
    CardLayout cl = new CardLayout();

    public CLayout() {
        panelCont.setLayout(cl);

        panelFirst.add(buttonOne);
        panelSecond.add(buttonSecond);
        panelFirst.setBackground(Color.BLUE);
        panelSecond.setBackground(Color.GREEN);

        panelCont.add(panelFirst, "1");
        panelCont.add(panelSecond, "2");
        cl.show(panelCont, "1");

        buttonOne.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cl.show(panelCont, "2");
            }
        });

        buttonSecond.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cl.show(panelCont, "1");
            }
        });
        frame.add(panelCont);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new CLayout();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

是的,它适用于CardLayout,但也可以调整大小。例如,您可以嵌套JPanel。或使用这样的东西: 的代码

  componentDidMount() {
    // InteractionManager.runAfterInteractions(() => {
    //   this.setState({isReady: true});
    // })
    setTimeout(() => {
       this.setState({isReady: true});
    }, 75);
  }

where组件(这里是JLabel而不是JPanel)的首选集是大小,然后将其放在另一个JPanel中。

我希望这会对你有所帮助。