Je veux mettre un Jbutton sur une coordonnée particulière dans un JFrame. J'ai mis setBounds pour le JPanel (que j'ai placé sur le JFrame) et aussi setBounds pour le JButton. Cependant, ils ne semblent pas fonctionner comme prévu.
Ma sortie:
Voici mon code:
import Java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Control extends JFrame {
// JPanel
JPanel pnlButton = new JPanel();
// Buttons
JButton btnAddFlight = new JButton("Add Flight");
public Control() {
// FlightInfo setbounds
btnAddFlight.setBounds(60, 400, 220, 30);
// JPanel bounds
pnlButton.setBounds(800, 800, 200, 100);
// Adding to JFrame
pnlButton.add(btnAddFlight);
add(pnlButton);
// JFrame properties
setSize(400, 400);
setBackground(Color.BLACK);
setTitle("Air Traffic Control");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Control();
}
}
Comment placer le JButton
aux coordonnées (0, 0)?
La ligne suivante doit être appelée avant d'ajouter votre composant
pnlButton.setLayout(null);
Ci-dessus, votre panneau de contenu utilisera une disposition absolue. Cela signifie que vous devrez toujours définir explicitement les limites de votre composant en utilisant la méthode setBounds
.
En général, je ne recommanderais pas d'utiliser une disposition absolue.
Utilisez child.setLocation(0, 0)
sur le bouton et parent.setLayout(null)
. Au lieu d'utiliser setBounds (...) sur le JFrame pour le dimensionner, pensez à utiliser simplement setSize(...)
et à laisser le système d'exploitation positionner le cadre.
//JPanel
JPanel pnlButton = new JPanel();
//Buttons
JButton btnAddFlight = new JButton("Add Flight");
public Control() {
//JFrame layout
this.setLayout(null);
//JPanel layout
pnlButton.setLayout(null);
//Adding to JFrame
pnlButton.add(btnAddFlight);
add(pnlButton);
// postioning
pnlButton.setLocation(0,0);
Vous devez d'abord définir la mise en page par la syntaxe pnlButton.setLayout()
, puis choisir la mise en page la plus appropriée que vous souhaitez. Ex: pnlButton.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
. Et puis, prenez ce JButton dans JPanel.
Définissez quelque part les consts:
private static final int BUTTON_LOCATION_X = 300; // location x
private static final int BUTTON_LOCATION_Y = 50; // location y
private static final int BUTTON_SIZE_X = 140; // size height
private static final int BUTTON_SIZE_Y = 50; // size width
puis ci-dessous:
JButton startButton = new JButton("Click Me To Start!");
// startButton.setBounds(300, 50,140, 50 );
startButton.setBounds(BUTTON_LOCATION_X
, BUTTON_LOCATION_Y,
BUTTON_SIZE_X,
BUTTON_SIZE_Y );
contentPane.add(startButton);
où contentPane
est l'objet Container
qui contient le cadre entier:
JFrame frame = new JFrame("Some name goes here");
Container contentPane = frame.getContentPane();
J'espère que cela aide, fonctionne très bien pour moi ...
Je l'ai compris lol. pour le bouton faire .setBounds (0, 0, 220, 30) La disposition .setBounds est la suivante (int x, int y, int largeur, int hauteur)
Tout d'abord, rappelez-vous la hauteur et la largeur de votre taille JPanel, puis observez: les coordonnées JButton sont (xo, yo, x longueur, y longueur). Si votre fenêtre fait 800x600, il vous suffit d'écrire:
JButton.setBounds(0, 500, 100, 100);
Il vous suffit d'utiliser un écart de coordonnées pour représenter le bouton et de savoir où se termine la fenêtre et où commence la fenêtre.