Ver Mensaje Individual
  #6 (permalink)  
Antiguo 08/08/2011, 14:00
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: No me aparecen los botones, duda de swing basico

Hola,

Cita:
Iniciado por neoarcangel Ver Mensaje
... yo tampoco entiendo por que pone

pinferior.setLayout(diseno);

para el panel inferior y no hace lo mismo con el panel superior ...
Bueno, realmente es comprensible, le pone un Layout a un JPanel, y al otro no se lo pone porque quiere usar el que traen los JPanel por defecto que es el FlowLayout, así de simple.

Cita:
Iniciado por neoarcangel Ver Mensaje
Aunque es igual, por que los he cambiado los 2 agregados al marco y los 2 agregados al panel y es igual, los botones no se ven.
También es bastante comprensible, cambias una cosa y arreglas algo pero al mismo tiempo desarreglas otra cosa, al final no sabes que es lo que estas modificando realmente, tómate unos minutos para comprender por qué le estas poniendo un Layout a que cosa.

Cita:
Iniciado por neoarcangel Ver Mensaje
Luego he observado una cosa, pienso que se te ha saltado un gestor, ya que no era el border el que queria usar si no el box, y claro al intentar la solucion que me pones debajo.

add(psuperior, BorderLayout.PAGE_START);
add(bscroll, BorderLayout.CENTER);

no me deja, lo sumo que he conseguido es esto.

add(psuperior, BoxLayout.PAGE_AXIS);
add(bscroll);
Yo solamente estoy cambiando el código que muestras para que funcione como solicitaste que funcionara. Si le cambias el Layout lógicamente no va a funcionar lo que te estoy escribiendo, porque yo lo pensé para el código como lo mostraste, no para como lo modificaste después.

Cita:
Iniciado por neoarcangel Ver Mensaje
pero aun asi siguén sin aparecer, y lo curioso es que he probado con los gestores BorderLayout y GridLayout, en otros ejercicios parecidos y si que me aparecen.....aunque también he de decir que solo usan un panel, pero me puede dar igual por que incluso comentando el segundo panel y dejando solo uno no me sale con el BoxLayout.
Bueno, te muestro tres ejemplos funcionando de tres Layout aplicados al JFrame, observa bien que eliminé los Layout de los JPanel para que se ta haga más fácil ver por qué es que no te funciona como quieres. Observa bien como se usa el Layout en el JFrame y haz lo mismo en los JPanel.

BorderLayout
Código:
package org;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class GestoresdediseñoBoxlayout extends JFrame {

    public GestoresdediseñoBoxlayout() throws HeadlessException {
        super("Pila - Gestores de diseño");

        JPanel psuperior = new JPanel();
        JButton alta = new JButton("Alta");
        JButton baja = new JButton("Baja");
        JButton salvar = new JButton("Salvar");
        JButton actualizar = new JButton("Actualizar");
        psuperior.add(alta);
        psuperior.add(baja);
        psuperior.add(salvar);
        psuperior.add(actualizar);

        JTextArea texto = new JTextArea(4, 70);
        JScrollPane bscroll = new JScrollPane(texto);

        // SI USAMOS EL LAYOUT POR DEFECTO (BorderLayout)
        this.getContentPane().add(psuperior, BorderLayout.PAGE_START);
        this.getContentPane().add(bscroll, BorderLayout.CENTER);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setSize(400, 400);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        GestoresdediseñoBoxlayout marco = new GestoresdediseñoBoxlayout();
        marco.setVisible(true);
    }

}
BoxLayout
Código:
package org;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class GestoresdediseñoBoxlayout extends JFrame {

    public GestoresdediseñoBoxlayout() throws HeadlessException {
        super("Pila - Gestores de diseño");

        JPanel psuperior = new JPanel();
        JButton alta = new JButton("Alta");
        JButton baja = new JButton("Baja");
        JButton salvar = new JButton("Salvar");
        JButton actualizar = new JButton("Actualizar");
        psuperior.add(alta);
        psuperior.add(baja);
        psuperior.add(salvar);
        psuperior.add(actualizar);

        JTextArea texto = new JTextArea(4, 70);
        JScrollPane bscroll = new JScrollPane(texto);

        // SI USAMOS EL LAYOUT BOX (BoxLayout)
        BoxLayout box = new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS);
        this.getContentPane().setLayout(box);
        this.getContentPane().add(psuperior);
        this.getContentPane().add(bscroll);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setSize(400, 400);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        GestoresdediseñoBoxlayout marco = new GestoresdediseñoBoxlayout();
        marco.setVisible(true);
    }

}
FlowLayout
Código:
package org;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class GestoresdediseñoBoxlayout extends JFrame {

    public GestoresdediseñoBoxlayout() throws HeadlessException {
        super("Pila - Gestores de diseño");

        JPanel psuperior = new JPanel();
        JButton alta = new JButton("Alta");
        JButton baja = new JButton("Baja");
        JButton salvar = new JButton("Salvar");
        JButton actualizar = new JButton("Actualizar");
        psuperior.add(alta);
        psuperior.add(baja);
        psuperior.add(salvar);
        psuperior.add(actualizar);

        JTextArea texto = new JTextArea(4, 70);
        JScrollPane bscroll = new JScrollPane(texto);

        // SI USAMOS EL LAYOUT FLOW (FlowLayout)
        FlowLayout flow = new FlowLayout(FlowLayout.CENTER);
        this.getContentPane().setLayout(flow);
        this.getContentPane().add(psuperior);
        this.getContentPane().add(bscroll);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setSize(400, 400);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        GestoresdediseñoBoxlayout marco = new GestoresdediseñoBoxlayout();
        marco.setVisible(true);
    }

}
Estos ejemplos están hechos según las especificaciones de Java y la API.

Cita:
Iniciado por neoarcangel Ver Mensaje
Y bueno lo del setVisible 2 veces, puede resultar incomprensible...en realidad es incomprensible pero si lo dejo solo una vez no me aparece nada ni con el Flow. Lo que también he observado es algo.....curioso, por decir algo, y es que cuando compilas y quieres ver el resultado del codigo, la primera vez aparece y desaparece tan rapido que no ves ni la ventana, tienes que ejecutarlo 2 veces para que se quede la ventana fija...no se si será alguna opcion del netbeans, llevo poco tiempo trabajando con el y aun no lo domino.
No es incomprensible, pero si es erróneo. Los component no necesitan un setVisible, ni el JFrame necesita llamar setVisible varias veces. Si un programa no está hecho correctamente y se llaman a funciones incorrectamente, presentan un comportamiento 'incomprensible'.

NetBeans no necesita ejecutar el programa Java más de una vez, si no funciona correctamente existen dos opciones, tienes mal instalado NetBeans o tu programa esta hecho de forma incorrecta.

Saludos,