Я делаю доказательства с 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);
}
});
}
Большое спасибо заранее.
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Г - для которых ты потребовал добавлять. Я это не составил, но он для того, чтобы ты взял идею.