/ / Comment créer une classe Swing à plusieurs composants en Java - java, swing, oop

Comment créer une classe Swing à plusieurs composants en Java - java, swing, oop

J'essaie donc de créer plusieurs JLabels dans unJPanel l'ajoute ensuite à un JFrame. J'utilise la construction pour définir le texte des JLabels (16 d'entre eux), mais le texte n'est pas défini. Pourquoi est-ce? Merci :)

package GUI;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JFrame;

public class Window extends JFrame {
/**
* Create the frame.
*/
GridBagConstraints layout = new GridBagConstraints();

public Window()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
setLayout(new GridBagLayout());

InfoPane stats = new InfoPane();
layout.gridx = 0;
layout.gridy = 0;
layout.ipadx = 50;
add(stats.InfoPaneBox("John", "100", "UNSP", "Ukraine", "9" Knife", "05", "£123", "18"), layout);

setVisible(true);
}
}

Voici le jpanel multi-composants que je veux ajouter au JFrame. Aussi, quel est le meilleur moyen de créer des composants personnalisés dans Classes, puis de les ajouter à un JFrame principal?

package GUI;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;



public class InfoPane
{

JPanel container = new JPanel();

JLabel one = new JLabel("Name:");
JLabel two = new JLabel("Health:");
JLabel three = new JLabel("Gang:");
JLabel four = new JLabel("Location:");
JLabel five = new JLabel("Weapon:");
JLabel six = new JLabel("Police Noriety:");
JLabel seven = new JLabel("Money:");
JLabel eight = new JLabel("Gang Noriety:");

JLabel nameJL = new JLabel();
JLabel healthJL = new JLabel();
JLabel gangJL = new JLabel();
JLabel locationJL = new JLabel();
JLabel weaponJL = new JLabel();
JLabel policeNorietyJL = new JLabel();
JLabel moneyJL = new JLabel();
JLabel gangNorietyJL = new JLabel();


public JPanel InfoPaneBox(String name, String health, String gang, String location, String weapon, String police, String money, String gangn)
{
nameJL.setText(name);
healthJL.setText(health);
gangJL.setText(gang);
locationJL.setText(location);
weaponJL.setText(weapon);
policeNorietyJL.setText(police);
moneyJL.setText(money);
gangNorietyJL.setText(gangn);

container.add(one);
container.add(two);
container.add(three);
container.add(four);
container.add(five);
container.add(six);
container.add(seven);
container.add(eight);
container.add(nameJL);
container.add(healthJL);
container.add(gangJL);
container.add(locationJL);
container.add(weaponJL);
container.add(policeNorietyJL);
container.add(moneyJL);
container.add(gangNorietyJL);
one.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLoweredSoftBevelBorder(), "Stats", TitledBorder.LEFT, TitledBorder.TOP));
one.setPreferredSize(new Dimension(150,400));

return container;
}
}

Réponses:

1 pour la réponse № 1

Ajouter pack(); avant de définir le cadre sur visible. Le constructeur de Window devrait donc ressembler à:

 public Window()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
setLayout(new GridBagLayout());

InfoPane stats = new InfoPane();
layout.gridx = 0;
layout.gridy = 0;
layout.ipadx = 50;
add(stats.InfoPaneBox("John", "100", "UNSP", "Ukraine", "9" Knife", "05", "£123", "18"), layout);

pack();

setVisible(true);
}

Il y a encore beaucoup de problèmes de mise en page mais cela résout les étiquettes qui ne s'affichent pas.