la méthode pack () de JFrame ne fonctionne pas (java, ubuntu)

Je suis nouveau en Java. Je viens d’apprendre JPanel et JFrame. J’ai reçu cette note des solutions logicielles Java:

“La méthode pack du cadre définit sa taille de manière appropriée en fonction de son contenu. Dans ce cas, le cadre est dimensionné pour s’adapter à la taille du panneau qu’il contient.”

j’ai donc écrit ce code:

public static void main (Ssortingng [] args){ JFrame frame = new JFrame("test"); JPanel panel = new JPanel(); JLabel label1= new JLabel(""); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); //frame.setSize(1000, 500); frame.getContentPane().add(panel); Color darkBlue = new Color(8,40,94); panel.setSize(1000, 500); panel.setBackground(darkBlue); } 

mais le résultat est une fenêtre vraiment minuscule que je devrais maximiser avec la souris pour voir le contenu mais quand je règle la taille du cadre, tout fonctionne bien! et j’utilise Ubuntu. alors quelle est la raison de ce problème?

De l’ordre de votre code:

 JFrame frame = new JFrame("test"); JPanel panel = new JPanel(); JLabel label1= new JLabel(""); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); 

Vous n’avez rien ajouté dans le cadre avant de l’ pack() . pack() signifie que le cadre décide de sa taille en fonction des composants qui lui sont ajoutés.

Etant donné que vous n’avez pas ajouté de composants avant de les pack() , vous recevez une petite fenêtre avec visuellement rien à l’intérieur (jusqu’à ce que vous redimensionnez la fenêtre).

Lorsque le cadre est en cours de redimensionnement, paintManager sera consulté pour peindre le contentPane, donc si vous ajoutez avant pack (), non seulement le cadre sera redimensionné pour vous, les composants seront également peints.


Pour voir les composants dans JFrame:

 public static void main (Ssortingng [] args){ JFrame frame = new JFrame("test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); JLabel label1= new JLabel(""); panel.add(label1); //Add label to panel frame.add(panel); //Add panel (with label) to frame frame.pack(); //Let the frame adjust its size based on the added components frame.setVisible(true); } 
 public static void main (Ssortingng [] args){ JFrame frame = new JFrame("test"); JPanel panel = new JPanel(); JLabel label1= new JLabel(""); Color darkBlue = new Color(8,40,94); panel.setPreferredSize(new Dimension(1000, 500)); panel.setBackground(darkBlue); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //frame.setSize(1000, 500); frame.getContentPane().add(panel); frame.pack(); frame.setVisible(true); } 

Vous devez utiliser pack () après avoir défini les tailles. De plus, panel.setPreferredSize () fonctionne mieux que setSize () pour vous 🙂

appelez jframe.pack () avant la méthode jframe.setVisible ()!

main statique vide statique (Ssortingng [] args) {

 JFrame frame = new JFrame("test"); JPanel panel = new JPanel(); JLabel label1= new JLabel(""); panel.setSize(1000, 500); frame.getContentPane().add(panel); Color darkBlue = new Color(8,40,94); panel.setBackground(darkBlue); frame.pack() ; frame.setVisible(true); } 

Vous devrez également vérifier la disposition par défaut de JFrame, qui est la disposition de stream!