我看到您创建了一个
JLabel名为
_lbl:
JLabel _lbl=new JLabel();
但您永远不会将其添加到面板中。相反,您将
JLabel没有文本的新内容添加到面板中:
panel.add(new JLabel());
当然,这将构造一个不可见的空标签。
添加类似后,还尝试在您的实例上调用
revalidate()和
repaint(),如下所示:
JPanel``JLabel
JLabel _lbl=new JLabel("Label");//make label and assign text in 1 linepanel.add(_lbl);//add label we madepanel.revalidate();panel.repaint();
这样,您可能还需要调用
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); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)