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