奇怪的事情,我想在标签旁边添加文本字段。当我这样做时,它不会对.setLocation命令作出反应,并且背景颜色不会改变。不知道为什么。 但是,当我将frame Layout设置为null时,则比后台命令工作并更改color,但文本字段未显示。奇怪。我试图通过简单的frame.add(textField)通过面板添加文本字段,但不起作用。
public class EcrWindow extends JFrame {
JFrame ecrFrame;
JLabel ecr;
static JTextField ecrTitle;
public static void main(String[] args)
{
new EcrWindow();
}
EcrWindow()
{
JPanel p = new JPanel();
ecrFrame = new JFrame ("ECR WINDOW");
ecrFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
ecrFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
ecrFrame.setResizable(true);
ecrFrame.getContentPane().setBackground(Color.RED);
//ecrFrame.setLayout(null);
ecr = new JLabel("Emergancy Change title");
ecr.setSize(ecr.getPreferredSize());
ecr.setLocation(100,50);
ecrFrame.add(ecr);
ecrTitle = new JTextField();
ecrTitle.setColumns(30);
//ecrTitle.setSize(ecrTitle.getPreferredSize());
ecrTitle.setLocation(150,50);
p.add(ecrTitle); // adding text field to the panel, and panel adding to the frame
ecrFrame.add(p);
// ecrFrame.add(ecrTitle);
ecrFrame.setVisible(true);
}
}
答案 0 :(得分:0)
当您将布局设置为null时,您再也看不到面板p 了,因为没有任何信息显示在框架中的位置(文本框当您将版式设置为null时也会消失)。这就是为什么红色背景可见的原因。
在将面板p 添加到框架之前,请尝试在代码中添加以下行:
p.setBackground(Color.RED);
然后您应该看到一个红色背景,实际上是面板p 。
关于布局,您不应使用setLocation()。最好将其他布局机制与适当的LayoutManager结合使用。 另请参见this answer。
如果使用absolute positioning,则可以使用setLocation()。但这意味着您可以有效地手动编写布局管理器。我建议您阅读指南Laying Out Components Within a Container-您可以建立各种解释和示例。