Pregunta

Estoy Atascado con cómo cambiar el tamaño de la tercer botón a se convirtió en el mismo tamaño como los otros dos y se coloca en la parte inferior.

class ControlFrame extends JFrame 
    implements Runnable
{
    JButton jb_inc = new JButton();
    JButton jb_zero = new JButton();
    JButton jb_dec = new JButton();

    ControlFrame() {
        super("Control Frame");
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    ControlFrame(int x,int y, int w, int h) {
        this();
        this.setBounds(x, y, w, h);
        this.setVisible(true);

        jb_inc.setBounds(10,10,90,20);
        jb_zero.setBounds(10,40,90,20);
        jb_dec.setBounds(10,60,90,20);

        jb_inc.setVisible(true);
        jb_zero.setVisible(true);
        jb_dec.setVisible(true);

        this.getContentPane().add(jb_inc);
        this.getContentPane().add(jb_zero);
        this.getContentPane().add(jb_dec);

    }

    public void run() {
    }
}

public class Counting_Machine 
{
    public static void main(String[] args) {
        ControlFrame cf = new ControlFrame(0,200,80,150);
    }
}
¿Fue útil?

Solución

Dos sugerencias:

1) poner en común las cosas en la inicialización de instancia del bloque.Personalmente me estremezco cada vez que veo una llamada a "este()".

{ este.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}

ControlFrame() { super("cuadro de Control");}

ControlFrame(int x,int y, int w, int h) { super("cuadro de Control");...}

2) me gustaría deshacerse de la x, y, w, h constructor...personalmente tengo una clase llamada WindowUtils que tiene una "posición", método que calcula el tamaño de la pantalla y, a continuación, utiliza los valores pasados a crear una ventana que es el tamaño relativo de la pantalla.A continuación, el código que crea la ventana de llamadas.Prefiero tener pocos constructores como sea posible (muy a menudo que es cero o uno, yo casi nunca tienen dos o más).

3) esto.getContentPane().agregar(jb_inc);ahora puede ser escrito como agregar(jb_inc);- desde JDK 1.5, creo.

4) nunca llame overrideable métodos (todas las cosas que tiene este.antes de) dentro del constructor.Si una subclase fueron a reemplazar "agregar" se podía ver las cosas se rompen.Así que usted puede llamar a super.add(), o hacer la añade en otro método, o hacer que su final de la clase.

Ahora, para responder a su pregunta...:-)

Usted necesita para hacer uso de LayoutManagers para conseguir lo que quieres.

Dependiendo de lo que usted desea, usted probablemente querrá utilizar un BorderLayout así que usted puede conseguir en el botón en la parte inferior.

Otros consejos

Le sugiero que comience por leer la sección del tutorial Swing en Gestores de diseño Su código no funcionará porque usted está tratando de añadir 3 componentes para el "centro" de la BorderLayout que no funcionará. Elegir un LayoutManager que mejor se adapte a sus necesidades.

No hay necesidad de utilizar el método de los setBounds (...) cuando se utiliza un controlador de distribución. El trabajo del controlador de distribución es la posición de los componentes en base a las reglas del controlador de distribución. El tamaño preferido de cada botón debe ser el mismo desde entonces no se ha añadido ningún texto a los botones.

Además, no hay necesidad de invocar setVisible () en los botones, todos los componentes Swing son visibles por defecto, excepto los contenedores nivel superior (JFrame, JDialog).

Dado que se está configurando límites en todo, que no necesitan una LayoutManager en absoluto. Establecer su LayoutManager en nulo, entonces se puede colocar todo usted mismo, ya que son en su ejemplo.

this.setLayoutManager(null)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top