JButton s'étend pour prendre tout le cadre / conteneur
-
10-07-2019 - |
Question
Salut tout le monde. J'essaie de créer une interface graphique swing avec un bouton et une étiquette. im utilisant une disposition de bordure et l’étiquette (dans le champ nord) s’affiche correctement, mais le bouton occupe le reste de l’image (elle est dans le champ central). aucune idée de comment résoudre ce problème?
La solution
Vous devez ajouter le bouton à un autre panneau, puis l'ajouter au cadre.
Il s'avère que BorderLayout étend le composant jamais situé au milieu
Votre code devrait ressembler à ceci maintenant:
Avant
public static void main( String [] args ) {
JLabel label = new JLabel("Some info");
JButton button = new JButton("Ok");
JFrame frame = ...
frame.add( label, BorderLayout.NORTH );
frame.add( button , BorderLayout.CENTER );
....
}
Modifiez-le comme suit:
public static void main( String [] args ) {
JLabel label = new JLabel("Some info");
JButton button = new JButton("Ok");
JPanel panel = new JPanel();
panel.add( button );
JFrame frame = ...
frame.add( label, BorderLayout.NORTH );
frame.add( panel , BorderLayout.CENTER);
....
}
Avant / Après
Avant http://img372.imageshack.us/img372/2860/beforedl1.png Après http://img508.imageshack.us/img508/341/aftergq7.png
Autres conseils
Ou utilisez simplement la disposition absolue. C'est sur la palette de présentations.
Ou l'activer avec:
frame = new JFrame();
... //your code here
// to set absolute layout.
frame.getContentPane().setLayout(null);
De cette façon, vous pouvez librement placer le contrôle où vous voulez.
Encore une fois:)
import javax.swing.*;
public class TestFrame extends JFrame {
public TestFrame() {
JLabel label = new JLabel("Some info");
JButton button = new JButton("Ok");
Box b = new Box(BoxLayout.Y_AXIS);
b.add(label);
b.add(button);
getContentPane().add(b);
}
public static void main(String[] args) {
JFrame f = new TestFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}