2010-07-07 12 views
19

Quiero poner un Jbutton en una determinada coordenada en un JFrame. Puse setBounds para JPanel (que coloqué en JFrame) y también setBounds para JButton. Sin embargo, parece que no funcionan como se esperaba.Cómo colocar un JButton en una ubicación deseada en un JFrame usando Java

Mi salida:

alt text http://i49.tinypic.com/2d8kuah.jpg

Este es mi código:

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(); 
    } 
} 

¿Cómo puede colocar el JButton en la coordenada (0, 0)?

Respuesta

20

Siguiendo la línea debe ser llamado antes de agregar el componente

pnlButton.setLayout(null); 

encima fijará su panel de contenido para utilizar disposición absoluta. Esto significa que siempre tendrá que establecer los límites de su componente explícitamente utilizando el método setBounds.

En general, no recomendaría usar diseño absoluto.

+0

Ver: http://java.sun.com/docs/books/tutorial/uiswing/layout/none.html –

+0

utilicé setBounds para el botón e hice el diseño del panel nulo. Esto funciona para mi. Thks – Haxed

2

Use child.setLocation(0, 0) en el botón y parent.setLayout(null). En lugar de usar setBounds (...) en el JFrame para dimensionarlo, considere usar solo setSize(...) y dejar que el OS coloque el marco.

//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); 
+0

El tutorial de Java recomienda 'setBounds'. 'setLocation' simplemente delega a' setBounds' de todos modos. –

+0

@Mark_Peters Es cierto, aunque estaba (quizás erróneamente) asumiendo que al solicitar establecer el puesto, como la mayoría de las aplicaciones, el JButton debía dimensionarse automáticamente. 'setLocation' invoca' setBounds', pero usa los componentes de ancho y alto actuales, lo que le permite un tamaño basado naturalmente en los contenidos. Típico, pero tienes razón, no siempre es lo que se quiere. – Chadwick

+0

utilicé setBounds para el botón e hice el diseño del panel nulo. Esto funciona para mi. Thks – Haxed

0

Lo he descubierto lol. para el botón de hacer .setBounds (0, 0, 220, 30) La disposición .setBounds es como este (int x, int y, ancho int, altura int)

1

Definir algún lugar los 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 

y luego a continuación:

   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); 

donde contentPane es el objeto Container que mantiene todo el marco:

JFrame frame = new JFrame("Some name goes here"); 
Container contentPane = frame.getContentPane(); 

Espero que esto ayude, funciona muy bien para mí ...

+0

Así que la solución funciona, el único problema es que la esquina superior izquierda de JButtons está en las coordenadas especificadas, y como estoy tratando de hacer botones circulares, necesito que el botón se centre en las coordenadas dadas. ¿Hay alguna forma de que lo sepa o debería abrir una nueva pregunta? – Ungeheuer

+0

¿Hola? ¿Puedes responder mi pregunta? – Ungeheuer

0

Primero, recuerde la altura y el ancho del tamaño de su JPanel, luego observe: JLas coordenadas del botón son (xo, yo, x length, y length). Si la ventana es de 800x600, sólo tiene que escribir:

JButton.setBounds(0, 500, 100, 100); 

Sólo tiene que utilizar un espacio de coordenadas para representar el botón, y saber dónde termina la ventana y dónde empieza la ventana.

Cuestiones relacionadas