【问题标题】:Java not rendering components after adding a JTextfield添加 JTextfield 后 Java 不呈现组件
【发布时间】:2024-01-07 00:44:01
【问题描述】:

我知道以前有人问过这个问题,但没有答案。

在 Java 中,当我向框架添加组件时,在应用程序初始化时,添加 JTextField 后的所有元素都不会呈现。它们在您刷新屏幕后呈现,例如最小化和最大化屏幕。以下仅呈现文本字段。看起来像是一些 Java 渲染问题。

我的代码如下:

private void initialize() {
    frame = new JFrame();
    frame.setVisible(true);
    frame.setBounds(100, 100, 569, 321);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    txtGenerationRate = new JTextField();
    txtGenerationRate.setBounds(322, 29, 86, 20);
    frame.getContentPane().add(txtGenerationRate);
    txtGenerationRate.setColumns(10);

    lblAmountOfSolarPanelsText = new JLabel("Amount of solar panels:");
    lblAmountOfSolarPanelsText.setBounds(10, 57, 159, 14);
    frame.getContentPane().add(lblAmountOfSolarPanelsText);

    frame.setVisible(true); // added it for the second time, just to make sure
}

有人可以帮忙吗?

彼得

【问题讨论】:

  • 我可以确认滞后。第一次渲染需要一段时间或不渲染子组件。你可以从*.com/questions/6978017/…找到一些有用的信息

标签: java swing jframe jlabel jtextfield


【解决方案1】:

首先,您绝对应该阅读有关如何使用布局的内容:http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

第二件事,你应该在添加所有组件后设置你的框架可见,如果你不这样做,你必须调用 repaint()。

【讨论】:

    【解决方案2】:

    试着把它放在初始化方法的底部

    frame.setVisible(true);
    frame.setBounds(100, 100, 569, 321);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    【讨论】:

      【解决方案3】:

      你也可以试试frame.revalidate();frame.repaint();

      【讨论】:

        【解决方案4】:

        这似乎对我有用,当窗口首次出现时,我会同时看到标签和文本字段。标签文本不适合标签,因此被截断,但除此之外一切看起来都符合预期。可能是在尝试简化代码时从代码中删除了错误的片段?

        【讨论】: