只有JLabel没有出现

时间:2009-12-07 08:13:27

标签: java user-interface swing layout jlabel

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

+ mainFrame - JFrame
+ newFrame - JFrame
- + newPanel - JPanel
----标题 - JLabel
---- submitButton -JButton
    ...

按钮和文本字段都显示正常,但Jlabels根本不显示。我尝试使用不同的布局,但我仍然无法显示它。在mainFrame树中的JLabel,工作正常..所以看起来问题是由于newFrame声明或其他东西,但是然后按钮也不应该显示。好吧,我很遗憾,有人可以告诉我应该检查什么吗?

谢谢:)

4 个答案:

答案 0 :(得分:1)

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

它还可以帮助在不同的组件(不同的颜色)上设置边框以进行调试,以便查看哪些组件的大小为0,以缩小您的问题范围。记录或破坏组件的setSize方法也可以提供帮助。

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

答案 1 :(得分: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);
      }
    });
  }
}

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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