我的JTextField没有出现

时间:2014-07-07 18:43:06

标签: java swing layout layout-manager null-layout-manager

这是我的java代码:

JLabel persAdi,persSoyadi,persKodu,ust,alt;
JTextField ad,soyad,tckimlikno;
JButton bul,iptal;

    public persBul(){
        setSize (400,600);
        setResizable(false);
        setLocation (20, 20);
        setVisible(true);

        Container icerik = getContentPane();
        icerik.setLayout(null);
        icerik.getX();

        ust=new JLabel("Bulmak İstediğiniz Personelin;");
        ust.setBounds(10, 10, 200, 30);
        icerik.add(ust);

        persAdi=new JLabel("Adı:");
        persAdi.setBounds(10,40,80,15);
        icerik.add(persAdi);

        ad=new JTextField();
        ad.setBounds(50, 40, 80, 20);
        icerik.add(ad);


        persSoyadi=new JLabel("Soyadı:");
        persSoyadi.setBounds(10, 180, 80, 30);
        icerik.add(persSoyadi);

        soyad=new JTextField();
        soyad.setBounds(200, 40, 100, 30);

        Icon bulPng=new ImageIcon(getClass().getResource("search.png"));
        Icon iptalPng=new ImageIcon(getClass().getResource("cancel.png"));

        bul=new JButton("",bulPng);
        bul.setBounds(20, 120, 40, 40);
        icerik.add(bul);
        iptal=new JButton("",iptalPng);
        iptal.setBounds(90, 120, 40, 40);
        icerik.add(iptal);

    }

public static void main(String[] args){
    persBul app=new persBul();
}

当我调试此代码时,我的JTextField没有出现。只有第一个JLabel可以显示,我看不到任何其他JLabelJTextFieldJButton。我的光标在我的按钮上时出现我的按钮。我必须做这个项目,但我还没有创建用户界面。有人能帮助我吗?

1 个答案:

答案 0 :(得分:2)

您应该避免使用null布局。

您可以使用layout经理实现相同(或近似的)用户界面。正如我在this comment指出的那样。

这里是MCVE我建议你在进一步的问题中做。另请查看How to ask guide以便提出更好的问题。

我创建了一个新课程,因为尝试修改你的课程比这还要多。复制粘贴并理解它是如何工作的,然后将其调整到您自己的类中。

修改

您可以添加separators来添加空格。同样正如@Andrew Thompson在评论中所说,你可以看一下How to use multiple layout managers(我在例子中做了类似的事情)。以下是How to add spaces in swing的其他选项。也许GridBag Layout似乎更像null布局。

此处布局guide(链接也由Andrew提供)。

阅读完问题后:

Can I use setBounds(x,y,width,height); function with this code? Or What can I do for using this function (setBounds(x,y,width,height);)? Because I want to determine my own self x,y points of the JLabel,JTextField,JButton

你应该不惜一切代价避免使用setBounds(x,y,width,height);,因为安德鲁也解释了为什么:

Java GUIs might have to work on a number of platforms, on different screen resolutions & using different PLAFs. As such they are not conducive to exact placement of components.

使用null布局可能会在执行程序时带来一些意外错误。可以使用null布局(我的意思是setBounds(x,y,width,height);,当且仅当你是一个新手,但是只要有可能尝试开始使用布局管理器而不是null布局。

我想说的是:将null布局仅用于教育目的并没有错,但即使它更大,有时也更复杂,需要更多思考,它就是&#39 ; s 更好使用它们以避免意外错误。虽然您是学生使用它,但如果是专业课程,请避免使用它。

这里是this answer的输出所以你可以在秋千中看到空格的使用。

Output example

import javax.swing.*;
import java.awt.*;
class example {
    JFrame frame;
    JPanel panel, hPanel1, hPanel2;
    JLabel label1, label2;
    JTextField field1, field2;
    example() {
        frame = new JFrame("example");

        panel = new JPanel();
        hPanel1 = new JPanel();
        hPanel2 = new JPanel();

        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        hPanel1.setLayout(new FlowLayout());
        hPanel2.setLayout(new FlowLayout());

        label1 = new JLabel("Label 1");
        label2 = new JLabel("Label 2");
        field1 = new JTextField();
        field2 = new JTextField();

        field1.setColumns(6);
        field2.setColumns(6);

        hPanel1.add(label1);
        hPanel1.add(field1);

        hPanel2.add(label2);
        hPanel2.add(field2);

        panel.add(hPanel1);
        panel.add(hPanel2);

        frame.add(panel);

        frame.setSize(400,300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new example();
            }
        });
    }
}