首页 > 解决方案 > JLabel 未出现在 JPanel 中

问题描述

我用 JTextField、JPanel 和一个按钮制作了一个 JFrame,用户在其中输入一个值,单击按钮后,它将根据用户输入生成多个标签,但 JLabel没有出现。我做错了吗?

在此处输入图像描述

这是按钮的编码。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String s = jTextField1.getText();
    int noSub = Integer.valueOf(s);
    addData(noSub);
} 

这是添加JLabel的方法。

public void addData(int a){
    jPanel1.removeAll();
    int num = a;
    JLabel jLabel[] = new JLabel[num];

    for(int i=0;i<num;i++){
        jLabel[i]=new JLabel();
        jLabel[i] = new JLabel("Label "+i);
        jPanel1.add(jLabel[i]);
        jPanel1.revalidate();
        jPanel1.repaint();
    }
    jPanel1.updateUI();
}

标签: javaswingjframejpaneljlabel

解决方案


在这里做了一个简单的工作示例:

public class Sample extends JFrame{
    private JTextField inputField;
    private JPanel outputPanel;

    private Sample() {
        JPanel mainPanel = new JPanel(new BorderLayout());
        JPanel form = new JPanel(new GridBagLayout());
        inputField = new JTextField(3);
        JButton submitBtn = new JButton("Enter");
        form.add(inputField);
        form.add(submitBtn);
        mainPanel.add(form, BorderLayout.NORTH);
        outputPanel = new JPanel();
        mainPanel.add(outputPanel);
        submitBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String text = inputField.getText();
                int noSub = Integer.valueOf(text);
                addData(noSub);
            }

            void addData(int data){
                outputPanel.removeAll();
                JLabel jLabel[] = new JLabel[data];

                for(int i=0;i<data;i++){
                    jLabel[i] = new JLabel("Label "+i);
                    outputPanel.add(jLabel[i]);
                }
                outputPanel.revalidate();
                outputPanel.repaint();
                // No need to call outputPanel.updateUI()
            }
        });
        setSize(400,500);
        add(mainPanel);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new Sample();
    }
}

推荐阅读