文本字段不显示或对位置代码无反应

时间:2019-03-28 12:03:47

标签: java

奇怪的事情,我想在标签旁边添加文本字段。当我这样做时,它不会对.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);

    }
}

1 个答案:

答案 0 :(得分:0)

面板p 添加到框架后,该框架的 ContentPane 不可见。内容面板将被面板隐藏,这将占用框架中的所有可用空间。

当您将布局设置为null时,您再也看不到面板p 了,因为没有任何信息显示在框架中的位置(文本框当您将版式设置为null时也会消失)。这就是为什么红色背景可见的原因。

在将面板p 添加到框架之前,请尝试在代码中添加以下行:

p.setBackground(Color.RED);

然后您应该看到一个红色背景,实际上是面板p

关于布局,您不应使用setLocation()。最好将其他布局机制与适当的LayoutManager结合使用。 另请参见this answer

如果使用absolute positioning,则可以使用setLocation()。但这意味着您可以有效地手动编写布局管理器。我建议您阅读指南Laying Out Components Within a Container-您可以建立各种解释和示例。