У меня есть графический интерфейс с JFrame с 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();
}
Эти методы действительно переключают JPanels.
/**
* 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, где мы визуализируем остальные JPanels, через которые мы переключаемся.}
Эти методы позволяют мне просмотреть несколько JPanels, которые я сделал, дело в том, что я использую pack () , чтобы не возиться с зашитыми размерами (setSize ,imumSize, max ...), в начале это работает нормально, JPanels упакованы хорошо, пока я не переключусь на JPanel большего размера, чем другие, и в то время, когда я иду назад (через карты), JFrame придерживается большего размерапотребовалось ...
Итак, pack () работает над тем, чтобы увеличить панель и установить ее, а не над панелями меньшего размера, когда панель уже стала больше.Может быть, я неправильно понял, что делает pack () ?
Большое спасибо.