GridBagLayout: Comment définir la largeur de colonne fixe?
J'ai essayé de fixer la largeur de la colonne dans le code suivant pour les âges...Le truc c'est que quand j'ajoute une étiquette sur le panneau sur la gauche, puis la largeur est incrémenté automatiquement...et je Voudrais la largeur de colonne fixe...
Quelqu'un pourrait-il m'aider svp??
C'est le code:
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Point;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import java.io.IOException;
public class CurrentItem extends JPanel{
private static JFrame currentScreen;
public CurrentItem(JFrame p) {
GridBagConstraints c = new GridBagConstraints();
//Borramos todo lo que haya en la pantalla
this.removeAll();
this.revalidate();
currentScreen = p;
this.setBackground(Color.LIGHT_GRAY);
this.setLayout(new GridBagLayout());
currentScreen.add(this);
//--->
Panel leftPanel = new Panel();
leftPanel.setBackground(Color.BLACK);
c.weightx = 1.5;
c.weighty = 1;
//c.fill = GridBagConstraints.BOTH;
this.add(leftPanel, c);
//<---
//--->
Panel secondPanel = new Panel();
secondPanel.setBackground(Color.green);
c.weightx = 0.25;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
this.add(secondPanel, c);
//<---
//--->
Panel rightPanel = new Panel();
rightPanel.setBackground(Color.CYAN);
c.weightx = 1.5;
c.weighty = 1;
c.fill = GridBagConstraints.BOTH;
this.add(rightPanel, c);
//<---
currentScreen.setVisible(true);
this.requestFocusInWindow();
}
}
N'utilisez pas de
Au lieu de l'ajout de ces énormes
Panel
, qui est un composant AWT. Utilisation JPanel
qui est le composant Swing.Au lieu de l'ajout de ces énormes
import
déclarations, vous devriez ai ajouté un main
méthode, pour quelqu'un d'essayer avec
OriginalL'auteur Marie | 2014-07-16
Vous devez vous connecter pour publier un commentaire.
GridBagLayout
lieux de composants dans les rectangles (cellules) dans une grille, puis utilise les composants préféré tailles pour déterminer comment grand que les cellules doivent être.Les pondérations sont utilisées pour déterminer la façon de répartir l'espace entre les colonnes (
weightx
) et entre les lignes (weighty
); ceci est important pour la spécification de redimensionnement de comportement.Généralement les poids sont spécifiés avec 0,0 et 1,0, comme les extrêmes: les chiffres entre sont utilisés comme nécessaire.
Lire plus Comment Utiliser le GridBagLayout
Exemple de code: (ci-dessous le code fixe la largeur de la colonne avec 100% de la taille verticale.)
Supprimer
weightx
pour la première colonne et de la remplacergetPreferredSize()
méthode.OriginalL'auteur Braj
Si vous savez à l'avance les étiquettes que vous serez en ajoutant des, et de la façon dont l'échelle de chacun est:
Vous pouvez appeler
label.getPreferredSize().width
sur chaque étiquette pour déterminer la largeur de la plus grande étiquette.Ensuite, ajoutez un composant invisible (
Box.createHorizontalStrut(width)
) de la colonne pour le forcer à être que large à tous les temps.Ensuite, lorsque vous ajoutez toutes vos étiquettes, la largeur de la colonne du panneau ne changera pas.
OriginalL'auteur splungebob