JPanel не показывает себе, если я не изменяю размер JFrame

Я делаю доказательства с Java и создав графическую среду, у меня есть проблема, что JPanel, panelPrincipal, только показывает себе, если я изменяю вручную размер моего Jframe. Я существую provado с различными размерами JFrame и с различными Layouts, но ничто не подало меня... Какая-то идея?

Код класса JFrame:

public class GUI extends JFrame{

/**
 * Constructor de la clase GUI para el entorno grafico
 */
public GUI() {
    // Heu d'inicialitzar les variables d'instància
    super();
    makeFrame();
}

public void makeFrame() {

    JButton entradasButton;
    JButton trabajadoresButton;
    JButton largerButton;

    PeticionesGUI peticionesGUI;
    peticionesGUI = new PeticionesGUI();

    // Creacion del frame principal
    this.setTitle("Parque de Atracciones V 0.1");
    this.setSize(800,600);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    //Creacion panel Principal       
    JPanel panelPrincipal = new JPanel(new GridBagLayout());
    this.add(panelPrincipal);

    // Creacion menu principal
    JPanel toolbar = new JPanel();
    toolbar.setLayout(new GridLayout(10, 10));

    //Boton Entradas
    entradasButton = new JButton("Entradas");
    entradasButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            peticionesGUI.entradas(panelPrincipal);
        }
    });
    toolbar.add(entradasButton);

    //Boton Trabajadores
    trabajadoresButton = new JButton("Trabajadores");
    trabajadoresButton.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {
        peticionesGUI.trabajadores(panelPrincipal);
    }
                       });
    toolbar.add(trabajadoresButton);

    largerButton = new JButton("Larger");
    largerButton.addActionListener(new ActionListener() {
                           public void actionPerformed(ActionEvent e) { }
                       });
    toolbar.add(largerButton);           

    this.add(toolbar, BorderLayout.WEST);
}

}

Код метода JPanel:

public void entradas(JPanel panelPrincipal){

    JLabel labelUsername = new JLabel("Nombre Cliente: ");
    JLabel labelPassword = new JLabel("Identificacion: ");
    JTextField txtnombreCliente = new JTextField(20);
    JTextField txtnifCliente = new JTextField(20);
    JButton buttonLogin = new JButton("Crear Entrada");


    panelPrincipal.removeAll();
    panelPrincipal.repaint();
    GridBagConstraints constraints = new GridBagConstraints();
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(50, 10, 10, 50);

    // add components to the panel
    constraints.gridx = 0;
    constraints.gridy = 0;     
    panelPrincipal.add(labelUsername, constraints);

    constraints.gridx = 1;
    panelPrincipal.add(txtnombreCliente, constraints);

    constraints.gridx = 0;
    constraints.gridy = 1;     
    panelPrincipal.add(labelPassword, constraints);

    constraints.gridx = 1;
    panelPrincipal.add(txtnifCliente, constraints);

    constraints.gridx = 0;
    constraints.gridy = 2;
    constraints.gridwidth = 2;
    constraints.anchor = GridBagConstraints.CENTER;
    panelPrincipal.add(buttonLogin, constraints);

    // set border for the panel
    panelPrincipal.setBorder(BorderFactory.createTitledBorder(
            BorderFactory.createEtchedBorder(), "Gestor Entradas"));

    buttonLogin.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            Cliente persona;

            String nombreCliente = (txtnombreCliente.getText());
            String nifCliente = (txtnifCliente.getText());
            persona = new Entrada(nombreCliente, nifCliente, 24);
        }
    });

}

Большое спасибо заранее.

0
задан 21.03.2019, 14:25
1 ответ

Ferran, quizГЎs тебе следовало читать этого Layout https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html

С этим Layout ты можешь менять их pГЎneles и они не быть должным быть создавая каждый раз.

сейчас, когда, если ты предпочитаешь твою схему, пробуй добавляя эту lГ-nea:

  panelPrincipal.updateUI();

перед этой lГ-nea:

   panelPrincipal.setBorder(BorderFactory.createTitledBorder(
           BorderFactory.createEtchedBorder(), "Gestor Entradas"));

я показываю Тебя как cambiarГ - в твою программу с использованием CardLayout:

public class GUI extends JFrame implements java.awt.event.ActionListener {

    private JPanel panelPrincipal;
/**
 * Constructor de la clase GUI para el entorno grafico
*/
public GUI() {

    super();
    makeFrame();
}

@Override //aquí escuchamos a los botones
public void actionPerformed(java.awt.event.ActionEvent evento) {
    CardLayout layout = (CardLayout)(panelPrincipal.getLayout());
    layout.show(panelPrincipal, evento.getActionCommand()); 
     //getActionCommand() te da el nombre que le pusiste al botón. 
     //Aunque lo puedes cambiar via button.setActionCommand("otro nombre");
 }

public void makeFrame() {

    //Creacion panel Principal       
    JPanel panelPrincipal = new JPanel(new GridBagLayout());
    this.add(panelPrincipal);

    JPanel entradasPanel = creaEntradasPanel();
    JPanel trabajadoresPanel = creaTrabajadoresPanel();

    panelPrincipal.add(entradasPanel, "Entradas");
    panelPrincipal.add(trabajadoresPanel, "Trabajadores");

    JButton entradasButton;
    JButton trabajadoresButton;
    JButton largerButton;

    PeticionesGUI peticionesGUI;
    peticionesGUI = new PeticionesGUI();

    // Creacion del frame principal
    this.setTitle("Parque de Atracciones V 0.1");
    this.setSize(800,600);
    setDefaultCloseOperation(EXIT_ON_CLOSE);


    // Creacion menu principal
    JPanel toolbar = new JPanel();
    toolbar.setLayout(new GridLayout(10, 10));

    //Boton Entradas
    entradasButton = new JButton("Entradas");
    entradasButton.addActionListener(this);
    ///tu clase GUI ahora implementa el ActionListener y escucha ambos botones

    toolbar.add(entradasButton);

    //Boton Trabajadores
    trabajadoresButton = new JButton("Trabajadores");
    trabajadoresButton.addActionListener(this);
    ///tu clase GUI ahora implementa el ActionListener y escucha ambos botones

    toolbar.add(trabajadoresButton);

    largerButton = new JButton("Larger");
    largerButton.addActionListener(new ActionListener() {
                       public void actionPerformed(ActionEvent e) { }
                   });
    toolbar.add(largerButton);           

    this.add(toolbar, BorderLayout.WEST);
}

Для тебя mГ©todo поступающие данные, это cambiarГ - в asГ-:

public JPanel creaEntradas(){
    JPanel entradasPanel = new JPanel(new GridBagLayout());

    //etc, etc,

    //quitaría estas dos líneas:
    //panelPrincipal.removeAll();
    //panelPrincipal.repaint();

    // etc, etc.

    return entradasPanel;
}

И asГ - для которых ты потребовал добавлять. Я это не составил, но он для того, чтобы ты взял идею.

1
ответ дан 02.12.2019, 05:21
  • 1
    Большое спасибо. На данный момент я использовал panelPrincipal.updateUI (); Но кратко я прочитаю artí зад, который ты прокомментировал мне. Поскольку я вижу мой выбор, это очень халтура, нет? ;) – Ferran 21.03.2019, 23:30
  • 2
    не sé который ты имел в виду с халтурой. Твой opció n оно может функционировать, но если есть opció n, что у него остается в средства, меня usarí в. Привет. – AlbertoLopez 21.03.2019, 23:38