Java GridLayout图像大小

Java GridLayout图像大小,java,swing,user-interface,Java,Swing,User Interface,我正在制作一个程序,它会询问你的姓名和年龄,根据你的回答,它会输出一个文本短语和一个合适的图像,但我的问题是我无法控制网格布局中组件的大小,因此图片在顶部被切掉,所以我只能看到一小部分 public class eb extends JFrame { private JLabel lblQuestion; private JLabel lblName; private JLabel lblAge; private JLabel lblAnswer; pr

我正在制作一个程序,它会询问你的姓名和年龄,根据你的回答,它会输出一个文本短语和一个合适的图像,但我的问题是我无法控制网格布局中组件的大小,因此图片在顶部被切掉,所以我只能看到一小部分

public class eb extends JFrame {

    private JLabel lblQuestion;
    private JLabel lblName;
    private JLabel lblAge;
    private JLabel lblAnswer;
    private JTextField txtName;
    private JTextField txtAge;
    private JButton btnEligible;
    private ImageIcon image1 = new ImageIcon("H:\\NetBeansProjects\\Skill Set 15\\Egilible.jpg");
    private JLabel ImageEligible = new JLabel(image1);
    private ImageIcon image2 = new ImageIcon("H:\\NetBeansProjects\\Skill Set 15\\Unegilible.jpg");
    private JLabel ImageUnegibile = new JLabel(image2);

    public eb() {
        setLayout(new GridLayout(7, 1)); 
        lblQuestion = new JLabel("Are you eligible to vote?");
        add(lblQuestion);
        lblName = new JLabel("Enter your Name");
        add(lblName);
        txtName = new JTextField(15);
        add(txtName);
        lblAge = new JLabel("Enter your Age");
        lblAge.setLocation(lblName.getX(), lblName.getY());
        add(lblAge);
        txtAge = new JTextField(15);
        add(txtAge);
        btnEligible = new JButton("Am I Eligible?");
        add(btnEligible);
        lblAnswer = new JLabel("Answer");
        add(lblAnswer);
        Eligible eligible = new Eligible();
        btnEligible.addActionListener(eligible);
    }

    public class Eligible implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            int nAge = Integer.parseInt(txtAge.getText());
            String sName = txtName.getText();
            GridBagConstraints c = new GridBagConstraints();
            if (nAge > 18) {
                lblAnswer.setText("Step right up " + sName + ", and vote. ");
                c.fill = GridBagConstraints.VERTICAL;
                c.gridheight = 10;
                JPanel p1 = new JPanel();
                p1.add(ImageEligible, c);
                add(p1, c);
            } else {
                lblAnswer.setText("Maybe next time, " + sName);
                JPanel p2 = new JPanel();
                p2.add(ImageUnegibile, c);
                add(p2);
            }
        }
    }

这就是我到目前为止所做的,我试图用c来控制组件的高度,因为宽度已经很好了,我认为它只会使该部分变大。

尝试通过
getIconHeight()
getIconWidth()
获得图像的大小,然后通过调用
public void setSize(维度d)来设置JLabel的大小
,告诉我这是否有效。

不要将答案放在与表单的
网格布局相同的布局中。把它放在有伸展空间的地方

我对你的情况的建议是:

  • 将标签和文本字段的形式放在布局管理器的
    JPanel
    GridLayout
  • 将框架的内容窗格设置为使用
    边框布局
  • 将表单添加到contentPane的“页面开始”
  • 将答案添加到contentPane的“中心”

我不明白什么会进入公共无效设置大小(维度d),我不知道如何更改大小我建议您应该获得图像的宽度和高度,使用它创建一个维度对象,您将传递给JLabel的设置大小,它将根据图像大小固定标签大小,这可以帮助解决您的问题。如果没有,请告诉我。我的问题是,当我使用不同的面板时,我遇到了actionlistener去哪里的问题。我的actionlistener需要gridlayout和我选择使用的其他布局中的东西。你的actionlistener可以去任何有意义的地方。它不必放在面板中。如果它需要访问另一个面板或类中的变量,请创建访问器方法以公开它们或操作侦听器可以调用以执行所需操作的方法。如何创建访问器方法?例如:public int getCount(){return count;}