Je pense que vous essayez d'utiliser imbriquée JPanels
. C'est certainement un moyen d'organiser vos composants, mais l'inconvénient est le fait qu'il devient difficile à gérer dans certains cas. Vous pouvez essayer cet extrait de code ci-dessous. Dans le programme, vous trouverez:
1) Un tableau de JLabel
2) Un tableau de JTextField
3) Nichée JPanels
A la fin du programme que j'utilise le Container
à ajouter le produit final de ces objets à ma fenêtre graphique.
Le moyen le plus efficace que je peux penser est de définir ces composants au sommet de mon programme afin que je puisse les réutiliser plus tard comme je le dois.
Pour ce faire, vous pouvez essayer ce bout de code:
import javax.swing.*; //Required to use Swing Components
public class TestGUI extends JFrame
{
JLabel[] label; //Define this with an array
JTextField[] textField; //Define this with an array as well
private int nLabels; //Number of labels preferred
private int nTextFields; //Number of text fields preferred
public testGUI(int amt)
{
//Assuming that you want equal amounts of each,
//set these two variables to the "ant" input parameter
nLabels = amt;
nTextFields = amt;
//Set component attributes
label = new JLabel[2]; //Label compared text fields
textField = new JTextField[2]; //Use two of these for comparison
textField[0].setEnabled(false); //Disabled editing
//Do nothing with the second text field
JPanel labels = new JPanel(); //Place JLabels here
//Use this to align the labels vertically
labels.setLayout(new GridLayout(2, 1));
//Use this for loop to add the labels to this JPanel
for(int i = 0; i < nLabels; i++)
{
labels.add(label[i]);
//You can also define and apply additional properties
//to labels inside this loop. TIP: You can do this in
//any loop
}
JPanel txtFields = new JPanel(); //Place JTextFields here
//Use this to align the text fields vertically
txtFields.setLayout(new GridLayout(2, 1));
//Use this for loop to add the labels to this JPanel
for(int i = 0; i < nTextFields; i++)
{
textFields.add(textField[i]);
//You can also define and apply additional properties
//to text fields inside this loop. TIP: You can do
//this in any loop
}
//Now we have the two components, you asked for help with, set up
//Next, we will need another JPanel to add these to panels to.
//This JPanel will be added to the JFrame Container
//You probably know how to run this via the "main" method
JPanel window = new JPanel();
//Place the JPanel for the labels and text fields
//This requires a horizontal grid
window.setLayout(new GridLayout(1, 2));
//Add the the two JPanels: "labels" and "txtFields"
window.add(labels);
window.add(txtFields);
//Define the Container object to set up the GUI
Container container = getContentPane();
//Apply the "window" JPanel object to the container
container.add(window, BorderLayout.CENTER);
//Center this in the Graphics Window when displayed
}
//Any other methods and/or functions can be added as well
//If they are, they must placed in the constructor method above
}
Telle est l'approche que j'utiliser lorsque vous essayez d'aller à faire et manipuler mon Windows Graphics que je vous écris. Parfois j'écris des applets, mais seulement après m'être assuré que tout fonctionne correctement dans une simple fenêtre graphique.
J'espère que cela aide.
Si vous avez d'autres questions, faites le moi savoir et je vais répondre au mieux de mes capacités, merci.
La peinture personnalisée doit être effectuée en remplaçant la méthode paintComponent(), PAS la méthode paint(). Et vous devriez appeler super.paintComponent() comme première instruction de la méthode. – camickr