当前位置: 首页 > 知识库问答 >
问题:

在运行时向jpanel添加组件

乐正乐湛
2023-03-14


在运行时添加JLabelJPanel当单击JButton时。

我使用以下代码:

 panel.setLayout(null);

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

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

共有1个答案

罗华翰
2023-03-14

我看到您创建了一个名为\u lblJLabel

 JLabel _lbl=new JLabel();

但你永远不会把它添加到你的面板上。而是在面板中添加一个新的JLabel

 panel.add(new JLabel());

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

另外,在添加JLabel之后,请尝试在您的JPanel实例上调用重新验证()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/绝对布局这是非常糟糕的做法(除非做动画),可能会被证明是有问题的,很难使用。

而是使用LayoutManager

  • 布局管理器的可视化指南

或者,如果JPanel上只有一个组件,只需调用add(标签) 因为它将延伸到JPanel大小。

更新:

这是一个小样本。每次按下JButton时,只需将JLabels添加到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);
    }
}

 类似资料:
  • 问题内容: 我有一个和上。 在运行时添加到单击时。 我使用以下代码: 但没有显示任何在。 问题答案: 我看到您创建了一个名为: 但您永远不会将其添加到面板中。相反,您将没有文本的新内容添加到面板中: 当然,这将构造一个不可见的空标签。 添加类似后,还尝试在您的实例上调用和,如下所示: 这样,您可能还需要调用您的框架实例,以便调整大小以适合新组件。 另外,请不要使用/ 布局,这是非常糟糕的做法(除非

  • 我创建了一个JPanel,上面有我需要的所有JRadioButtons(称为PortSettings)。我还有一个按钮,叫做端口设置,当用户单击该按钮时,我需要JPanel上来显示单选按钮。我尝试将JPanel添加到actionlistener中,但没有效果。我的代码在下面。除了portsettings按钮之外,我已经从其他按钮中删除了所有其他ActionListener。如果这个问题让人困惑,我

  • 问题内容: 如何在jpanel中动态添加组件?当我单击按钮时,我应该有添加按钮,组件应该添加到JPanel。 我的问题是,当我单击添加按钮时,将文本字段和按钮添加到jpanel时,用户可以根据需要将它们添加到jpanel中的任意次数单击添加按钮。我已将scrollerpane添加到我的jpanel,并且jpanel布局管理器设置为null。 问题答案: 像往常一样,除了必须调用: 完成后,因为容器

  • 我是java swing的新手,现在我使用NetBeant使用NetBeans中内置的拖放设计器构建GUI。我现在面临的问题是,我有下面发布的代码,它是在Eclipse中编写的,正如您所看到的,我有一个扩展JPanel的类,我将从WEB_CAM捕获的图像添加到该JPanel中。现在,自从我切换到NetBeans,我使用设计器创建了JFrame、JPanel和JButtons,在我用NetBeans

  • 我还没有找到关于这方面的信息,但我已经在场景构建器中创建了一个布局,并在空的滚动窗格中放置了一个AnchorPane,以行为单位添加了文本、滑块和标签,然后为用户添加了一个按钮,以添加上面的新条目。 基本上是一个典型的偏好启发UI,用户还可以添加新条目并指定他们自己的偏好值。 当按下此按钮时,出于测试目的,该按钮将创建一个新标签,将其添加到AnchorPane,并将其重新定位到AnchorPane

  • 问题内容: 我是Java的新手,主要是CardLayout。我只想切换由JPanels表示的“窗口”。我在CardLayout的某处读过这份工作。但我的问题是,当到(这是CardLayout之一),它改变的内容几个像素顶端,从它的中心位置了。我在代码中跳过了它应该在的位置。 我有以下代码: 拜托,我搞砸了吗?谢谢。 问题答案: 由于您要在主JPanel中添加两个JPanel,因此这两个面板都需要容