Не удается увидеть JTextField после добавления JLabel и JButton - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь добавить базовый JFrame, в который я добавляю JLabel, JButton и JTextField в нем.Но одновременно в нем появляются только две вещи.

Я хочу, чтобы все три появлялись в кадре.

import javax.swing.*;
import java.awt.*;

public class Main {
    JFrame f;
    JLabel l1;
    JButton b1;
    JTextField tf1;

    public Main(){
        f=new JFrame();
        l1=new JLabel("This is the new Label");
        l1.setBounds(10,20,50,30);
        b1=new JButton("Submit");
        b1.setBounds(50,70,90,40);
        tf1=new JTextField();
        tf1.setBounds(70,100,90,40);

        f.add(l1);
        f.add(b1);
        f.add(tf1);
        l1.setLayout(new BorderLayout());

        f.setVisible(true);
        f.setSize(500,500);
        f.setLayout(null);
    }

    public static void main(String[] args) {
        new Main();
    }
}

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Единственное, что не так в вашем коде:

Вы установили f.setVisible (true) перед настройкой макета для фрейма.Ваши последние строки в конструкторе должны выглядеть следующим образом:

f.setLayout(null);
f.setSize(500,500);
f.setVisible(true);

setVisible () следует вызывать только после внесения всех необходимых изменений в фрейм.

Также удалите строку l1.setLayout ().Я не понимаю, почему вы устанавливаете макет для метки здесь.

0 голосов
/ 14 декабря 2018

Посмотрите, подходит ли вам приведенный ниже код.Я только изменил эти строки в вашем коде:

f.add(l1, BorderLayout.NORTH);
f.add(b1, BorderLayout.SOUTH);
f.add(tf1, BorderLayout.CENTER);
//f.setLayout(null);

Полный код:

import javax.swing.*;
import java.awt.*;

public class Main {
  JFrame f;
  JLabel l1;
  JButton b1;
  JTextField tf1;

  public Main(){
    f=new JFrame();
    l1=new JLabel("This is the new Label");
    l1.setBounds(10,20,50,30);
    b1=new JButton("Submit");
    b1.setBounds(50,70,90,40);
    tf1=new JTextField();
    tf1.setBounds(70,100,90,40);

    f.add(l1, BorderLayout.NORTH);
    f.add(b1, BorderLayout.SOUTH);
    f.add(tf1, BorderLayout.CENTER);
    l1.setLayout(new BorderLayout());

    f.setVisible(true);
    f.setSize(500,500);
    //f.setLayout(null);
  }

  public static void main(String[] args) {
    new Main();
  }
}
...