编程语言
首页 > 编程语言> > java-单击按钮后将对象添加到JPanel

java-单击按钮后将对象添加到JPanel

作者:互联网

我创建了一个内部带有JPanel的JScrollPane,我想在按下按钮后添加JPanel / JLabel / Other对象.例如,在按下三个按钮后,我想要得到类似以下内容:
  

我尝试用testlabel.setBounds()尝试myJPane.add(testLabel),但是没有结果,由于大小不变,我不想使用GridLayout.如果添加的对象具有不同的大小,请调整文本内容.

我应该用它做什么?

提前致谢.
最好的祝福,
汤姆.

解决方法:

这是一个JScrollPane内的JPanel,它在按下按钮时向其添加JLabel:

public class Example extends JFrame {

    public Example() {

        JPanel boxPanel = new JPanel();
        boxPanel.setLayout(new BoxLayout(boxPanel, BoxLayout.PAGE_AXIS));

        JTextField textField = new JTextField(20);      
        JButton sendButton = new JButton("Send");
        sendButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                JLabel label = new JLabel(textField.getText());
                label.setOpaque(true);
                label.setBackground(Color.RED);
                boxPanel.add(label);
                boxPanel.add(Box.createRigidArea(new Dimension(0,5)));
                textField.setText("");
                boxPanel.revalidate();
//              pack();
            }
        });


        JPanel southPanel = new JPanel();
        southPanel.add(textField);
        southPanel.add(sendButton);

        add(new JScrollPane(boxPanel));
        add(southPanel, BorderLayout.PAGE_END);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {

        new Example();
    }
}

BoxLayout将标签堆叠在一起.

笔记:

>必须在标签上调用setOpaque(true)才能使用背景色.
> Box.createRigidArea用于创建间隙.根据需要使用它.
>必须立即调用revalidate()才能立即显示新组件.
>每次调用pack()(在JFrame上)都会调整其大小以适合所有新组件.我将其放在此处进行演示,因为初始帧大小太小,无法显示添加的初始组件.

标签:java,add,swing,jpanel,jscrollpane
来源: https://codeday.me/bug/20191013/1909395.html