Je souhaite créer une interface graphique contenant trois champs de texte et un résultat affiché à l'aide de Jlabel qui s'aligne verticalement avec les champs de texte. Cependant, je voulais aussi ajouter une bordure à cette étiquette afin que la bordure soit de taille fixe et ait la même taille que les champs de texte. C'est ok si l'étiquette déborde de la bordure. Il ressemble maintenant à ceci: GUI J'ajoute manuellement des espaces afin de tenir l'espace, mais je ne pouvais toujours pas aligner l'étiquette sur la même largeur que les champs de texte, n'importe qui sait s'il vous plaît aider à résoudre le problème.Jlabel Java GUI avec bordure fixe
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TestScorePanel extends JPanel{
private JPanel p5, label_panel,text_panel;
private JButton calculate_average;
private JLabel length1_label, length2_label, length3_label,output_Label,result_Label;
private JTextField length1, length2, length3;
public TestScorePanel(){
length1_label = new JLabel("Enter length #1");
length2_label = new JLabel("Enter length #2");
length3_label = new JLabel("Enter length #3");
output_Label = new JLabel("Average");
result_Label = new JLabel(" ");//spaces used to hold the space
length1 = new JTextField(5);
length2 = new JTextField(5);
length3 = new JTextField(5);
calculate_average = new JButton("Calculate Average");
calculate_average.addActionListener(new ScoreListener());
p5 = new JPanel();
label_panel = new JPanel(); // left side labels
text_panel = new JPanel(); // right side labels
label_panel.setLayout(new BoxLayout(label_panel, BoxLayout.Y_AXIS));//set vertical layout for panel
text_panel.setLayout(new BoxLayout(text_panel, BoxLayout.Y_AXIS));
setBorder(BorderFactory.createEmptyBorder(10,10,10,10));//set
result_Label.setBorder(BorderFactory.createLineBorder(Color.black));
//setMinimumSize donesn's seem to work the way I wanted.
result_Label.setMinimumSize(new Dimension(400,20));
p5.setBorder(BorderFactory.createTitledBorder("Enter Three lengths"));
p5.add(label_panel);
p5.add(Box.createRigidArea(new Dimension (50,0)));
p5.add(text_panel);
add(p5);
label_panel.add(length1_label);
text_panel.add(length1);
label_panel.add(Box.createRigidArea(new Dimension (0, 10)));
text_panel.add(Box.createRigidArea(new Dimension (0, 10)));
label_panel.add(length2_label);
text_panel.add(length2);
label_panel.add(Box.createRigidArea(new Dimension (0, 10)));
text_panel.add(Box.createRigidArea(new Dimension (0, 10)));
label_panel.add(length3_label);
text_panel.add(length3);
label_panel.add(Box.createRigidArea(new Dimension (0, 10)));
text_panel.add(Box.createRigidArea(new Dimension (0, 10)));
label_panel.add(output_Label);
text_panel.add(result_Label);
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(Box.createRigidArea(new Dimension (0, 10)));
add(calculate_average);
setPreferredSize(new Dimension(320,220));
}
private class ScoreListener implements ActionListener{
public void actionPerformed(ActionEvent event){
int len1, len2, len3, average;
len1 = Integer.parseInt(length1.getText());
len2 = Integer.parseInt(length2.getText());
len3 = Integer.parseInt(length3.getText());
average= (len1+ len2+ len3)/3;
if (event.getSource() == calculate_average)
result_Label.setText(Integer.toString(average));
}
}
}
Pensez à utiliser un 'GridBagLayout' au lieu – MadProgrammer