我创建了一个 JScrollPane,其中包含 JPanel,我想在按下按钮后添加 JPanel/JLabel/其他对象。例如,按下三个按钮后我想要得到这样的结果:
我尝试了 myJPane.add(testLabel)
和 teSTLabel.setBounds()
但没有结果,我不想使用 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)
必须在label
上调用,以使其遵循背景颜色。Box.createRigidArea
用于创建间隙。按照您的意愿使用它。- 为了立即显示新组件,必须调用
revalidate()
。 - 调用
pack()
(在JFrame
上)将每次调整其大小以适应所有新组件。我只是将其放在那里进行演示,因为初始框架尺寸太小,无法显示添加的初始组件。
关于java - 单击按钮后将对象添加到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30257936/