我正在写一个简单的应用程序,它有一个按钮,打开一个新窗口,然后显示一个简单的GUI /文本,以接受来自用户的输入。但由于某种原因,我可以让JLabel显示在新窗口上。该应用程序具有以下结构:
+ mainFrame - JFrame
+ newFrame - JFrame
- + newPanel - JPanel
----标题 - JLabel
---- submitButton -JButton
...
按钮和文本字段都显示正常,但Jlabels根本不显示。我尝试使用不同的布局,但我仍然无法显示它。在mainFrame树中的JLabel,工作正常..所以看起来问题是由于newFrame声明或其他东西,但是然后按钮也不应该显示。好吧,我很遗憾,有人可以告诉我应该检查什么吗?
谢谢:)
答案 0 :(得分:1)
确保在使其可见之前执行frame.pack()。
它还可以帮助在不同的组件(不同的颜色)上设置边框以进行调试,以便查看哪些组件的大小为0,以缩小您的问题范围。记录或破坏组件的setSize方法也可以提供帮助。
除此之外,也许发布一些示例代码?目前,你回答的问题相当模糊。
答案 1 :(得分:1)
首先,您知道JDialog和JOptionPane - 这些类通常是显示另一个弹出窗口的更好方法。使用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对象边界内的每个像素。这解决了我同类型的问题。