I want to make a GUI that contains three textfields and one result displayed using Jlabel which align with the textfields vertically. However, I also wanted to add a border to this label so that the border is fixed size and have same size as textfields. It's ok if the label overflow the border. It now looks like this : GUI I manually add spaces in order to hold the space, however I still couldn't make the label align same width as textfields, anyone knows please help fix the problem.
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));
}
}
}