我有一个JPanel和JButton上JFrame.
在运行时添加JLabel到JPanel单击时JButton.
我使用以下代码:
panel.setLayout(null);
jLabel _lbl=new jLabel();
_lbl.setText("Label");
panel.add(_lbl);
panel.validate();
Run Code Online (Sandbox Code Playgroud)
但没有任何显示JLabel在JPanel.
Dav*_*amp 13
我看到你创建了一个JLabel名为_lbl:
JLabel _lbl=new JLabel();
Run Code Online (Sandbox Code Playgroud)
但你永远不会把它添加到你的面板.而是JLabel在面板中添加一个没有文本的新内容:
panel.add(new JLabel());
Run Code Online (Sandbox Code Playgroud)
这将构成一个不可见的空标签.
也可以在添加之后尝试调用revalidate()并repaint()在您的JPanel实例上执行以下操作JLabel:
JLabel _lbl=new JLabel("Label");//make label and assign text in 1 line
panel.add(_lbl);//add label we made
panel.revalidate();
panel.repaint();
Run Code Online (Sandbox Code Playgroud)
有了这个,你可能还需要调用pack()你的帧实例,以便调整大小JFrame以适应新的组件.
也请永远不要使用null/ Absolute布局这是非常糟糕的做法(除非做动画)并且可能被证明是有问题的并且非常难以使用.
而是使用LayoutManager:
或者,如果您只是在JPanel简单调用上只有一个组件,add(label);因为它将拉伸到该JPanel大小.
更新:
这是一个小样本.只需JLabel在JPanel每次JButton按下时添加s :
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);
}
}
Run Code Online (Sandbox Code Playgroud)