当前位置: 首页 > 面试题库 >

在运行时将组件添加到jpanel

熊朝
2023-03-14
问题内容

我有一个JPanelJButtonJFrame
在运行时添加JLabelJPanel单击时JButton

我使用以下代码:

 panel.setLayout(null);

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

但没有显示任何JLabelJPanel


问题答案:

我看到您创建了一个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 line

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

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

这样,您可能还需要调用pack()您的框架实例,以便调整大小JFrame以适合新组件。

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

而是使用LayoutManager

  • 布局管理器的可视指南

或者,如果您仅在JPanel简单调用中只有一个组件add(label);,则它将扩展到该JPanel大小。

更新:

这是一个小样本。只需JLabelJPanel每次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);
    }
}


 类似资料:
  • 在运行时添加到当单击时。 我使用以下代码: 但是在中没有显示任何。

  • 问题内容: 如何将行添加到numpy数组? 我有一个数组A: 如果X中每行的第一个元素满足特定条件,我希望从另一个数组X向该数组添加行。 Numpy数组没有像列表那样的“追加”方法,或者看起来。 如果A和X是列表,我只会这样做: 是否有 numpythonic的 方法可以做到这一点? 谢谢,S ;-) 问题答案: 什么啊 如果它是一个二维数组,你怎么能那么其行比作一个号码:? OP评论后编辑: 从

  • 问题内容: 我收到以下错误,因为Java 11排除了JavaFX作为最新版本的一部分。 那么如何在Java 11中将JavaFX添加到Eclipse?谢谢。 问题答案: 按照入门指南,这些是从Eclipse运行JavaFX 11的必需步骤。 1安装Eclipse 2018-09 。 2安装JDK 11 。 3将Java 11作为已安装的JRE添加到Eclipse:Eclipse->窗口->首选项-

  • 问题内容: 我正在尝试向JTable中的特定列添加滚动功能。我已经实现了一个自定义的TableCellRenderer组件,并且可以看到表中的滚动窗格很好,但是我无法滚动它。我也尝试实现TableCellEditor,但没有任何运气。 有谁知道如何使包含scrollPane的单元格可滚动? 问题答案: 使用TableCellRenderer不可能添加任何滚动行为,因为它不接收任何事件,仅绘制组件。

  • 我知道ApplicationContext扩展点,如ApplicationContext事件和BeanFactoryPostProcessor。 我手头的问题是,在创建了一些bean之后,我需要添加bean,我想这会丢弃BeanFactoryPostProcessor选项,因为在应用程序上下文开始注册bean之前会发生这种情况。 我尝试在上下文刷新后添加一个singletonBean:

  • 问题内容: 我想尽可能使用Java代码将jar文件动态添加到我的项目的类路径中,我想使用外部jar文件并加载其类,以便稍后将其作为Beans执行(Spring框架)。 谢谢 :) 问题答案: URLClassLoader child = new URLClassLoader (myJar.toURL(), this.getClass().getClassLoader()); Class class