0

我正在编写一个简单的应用程序,它有一个打开一个新窗口的按钮,然后显示一个简单的 GUI/文本来接受用户的输入。但由于某种原因,我可以让 JLabel 显示在新窗口上。该应用程序具有以下结构:

+mainFrame - JFrame
+newFrame - JFrame
-+newPanel - JPanel
----title - JLabel
----submitButton -JButton
...

按钮和文本字段都显示正常,但 Jlabels 根本不会显示。我尝试过使用不同的布局,但仍然无法显示。mainFrame 树中的 JLabels 工作正常.. 所以问题似乎是由于 newFrame 声明或其他原因,但按钮也不应该显示。好吧,我有点迷路了,有人可以建议我应该检查什么吗?

谢谢 : )

4

4 回答 4

1

确保在使其可见之前执行 frame.pack()。

它还可以帮助在不同的组件上设置边框(以不同的颜色)以进行调试,以查看哪些组件的尺寸为/不为 0,以缩小您的问题范围。记录或断点组件的 setSize 方法也有帮助。

除此之外,也许发布一些示例代码?目前,您的问题回答起来相当模糊。

于 2009-12-07T08:24:08.660 回答
1

首先,您知道JDialogJOptionPane - 这些类通常是显示另一个弹出窗口的更好方法。很少使用 2 个 JFrame(尽管有时这样做是明智的)。

其次,您是否完成了 pack() 和 setVisible(true)?

下面的代码对我来说很好。要么这对您不利,并且与您的 Java 实现有关,要么您必须做一些不同的事情,在这种情况下,您可以告诉我们它是什么:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class JLabelShower {
  public static void main(String [] args) {
    JFrame mainFrame = new JFrame("main frame");
    JButton popup = new JButton("start new frame");
    mainFrame.getContentPane().add(popup);
    mainFrame.pack();
    mainFrame.setVisible(true);

    popup.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JFrame newFrame = new JFrame("new frame");
        JPanel newPanel = new JPanel();
        JLabel title = new JLabel("title");
        newPanel.add(title);
        newFrame.setContentPane(newPanel);
        newFrame.pack();
        newFrame.setVisible(true);
      }
    });
  }
}
于 2009-12-07T08:31:47.030 回答
0

使用 title.setOpaque(true) 将 JLabel 对象的不透明度设置为 true。它将绘制 JLabel 对象边界内的每个像素。这解决了我的同类问题。

于 2013-09-24T11:13:01.350 回答
0

如果您使用 JLabel 作为占位符,即使用空字符串初始化它并稍后设置文本:

由于 JLabel 的大小是在面板布局时计算的(即早期),并且基于包含的文本,因此您可能最终会得到一个标签,认为它的首选大小为 (0, 0)。在这种情况下,您应该通过使用适当的值调用setPreferredSize
来告诉标签它应该要求什么大小。

另一个原因可能是您在周围面板中使用的布局管理器。也许您将标签和按钮添加到同一个地方,例如 BorderLayout.CENTER。这可以解释为什么只显示两者中的一个。

于 2009-12-07T09:38:26.633 回答