为什么pack()不能同时调整大小(放大和缩小)-Swing

时间:2018-12-08 11:56:40

标签: java swing layout layout-manager cardlayout

我有一个带有JFrame的JFrame的GUI,该JPanel可以通过CardLayout管理器进行切换。代码是这样的:

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Stack;

public class VistaPrincipal extends javax.swing.JFrame {

    private Stack<String> nomVistes;

    /**
     * Creates new form VistaPrincipal
     */
    public VistaPrincipal() {
        nomVistes = new Stack<>();

        initComponents();

        this.setTitle("Dynamic Academic Scheduler");
        this.setResizable(false);

    }

    public void tornarInici() {
        System.out.println("[ INFO ] Solicitat tornar al menu inicial");
       ((CardLayout) ventana.getLayout()).first(ventana);
       pack();
    } 

    public void tornarEnrere() {
       System.out.println("[ INFO ] Solicitat tornar a la vista anterior amb nom: " + nomVistes.peek());
       ((CardLayout) ventana.getLayout()).show(ventana, nomVistes.peek());
       pack();
       nomVistes.pop();
    }

这些方法是真正在JPanel之间切换的方法。

       /**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {

    ventana = new javax.swing.JPanel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    getContentPane().setLayout(new java.awt.CardLayout());

    ventana.setLayout(new java.awt.CardLayout());
    getContentPane().add(ventana, "card2");

    pack();
}// </editor-fold>//GEN-END:initComponents

initComponents()由Netbeans自动生成。

// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel ventana;
// End of variables declaration//GEN-END:variables

这是JPanel,我们可以看到正在切换的其余JPanel。     }

这些方法使我可以浏览制作的几个JPanel,情况是我使用 pack()避免弄乱硬接线尺寸(setSize,minimumSize,max ...),一开始效果很好,将JPanels打包好,直到我切换到比其他JPanel更大的JPanel为止,而当我向后退(通过卡)时,JFrame会坚持使用它占用的更大尺寸。

因此, pack()正在努力使面板更大并且适合它,但是一旦面板已经变得更大就不再适合较小的面板。也许我误解了 pack()的作用是什么?

非常感谢您。

0 个答案:

没有答案