gpt4 book ai didi

java - 在运行时将组件添加到 jpanel

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:42 24 4
gpt4 key购买 nike

我在 JFrame 上有一个 JPanel 和一个 JButton
在运行时添加 JLabelJPanel 当点击 JButton 时。

我使用以下代码:

 panel.setLayout(null);

jLabel _lbl=new jLabel();
_lbl.setText("Label");
panel.add(_lbl);
panel.validate();

但是在JPanel中没有显示任何JLabel

最佳答案

我看到您创建了一个名为 _lblJLabel:

 JLabel _lbl=new JLabel();

但您永远不会将其添加到您的面板中。相反,您向面板添加一个没有文本的新 JLabel:

 panel.add(new JLabel());

这当然会构造一个不可见的空标签。

添加 JLabel 后,还可以尝试在 JPanel 实例上调用 revalidate()repaint(),例如所以:

JLabel _lbl=new JLabel("Label");//make label and assign text in 1 line

panel.add(_lbl);//add label we made

panel.revalidate();
panel.repaint();

有了这个,您可能还需要在框架实例上调用 pack() 以调整 JFrame 的大小以适应新组件。

另外请不要使用null/Absolute 布局,这是非常糟糕的做法(除非做动画)并且可能会出现问题并且很难使用。

而是使用 LayoutManager:

或者如果您在 JPanel 上只有一个组件,只需调用 add(label); 因为它会拉伸(stretch)到 JPanel 大小.

更新:

这是一个小样本。每次按下 JButton 时,只需将 JLabel 添加到 JPanel 即可:

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class JavaApplication116 {

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new JavaApplication116().createAndShowUI();
}
});
}

private void createAndShowUI() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

initComponents(frame);

frame.setResizable(false);
frame.pack();
frame.setVisible(true);
}

private void initComponents(final JFrame frame) {
final JPanel panel = new JPanel(new FlowLayout());
JButton button = new JButton("Add label");
button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
JLabel _lbl = new JLabel("Label");//make label and assign text in 1 line

panel.add(_lbl);//add label we made

panel.revalidate();
panel.repaint();

frame.pack();//so our frame resizes to compensate for new components
}
});
frame.getContentPane().add(panel, BorderLayout.CENTER);
frame.getContentPane().add(button, BorderLayout.SOUTH);
}
}

关于java - 在运行时将组件添加到 jpanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12660293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com