добавив больше ярлыков в Java - PullRequest
4 голосов
/ 08 ноября 2011

Здравствуйте, коллеги-программисты!Я пытаюсь добавить два JLabel в JFrame, но второй метод add, который добавил метку, похоже, переписал мой первый метод add.Я попытался решить эту проблему, используя 2 разные переменные метки и используя метод setLocation, предоставляя разные координаты для каждой метки.Но я не могу решить это.Почему я не могу добавить две метки в мою программу?Кстати, я не получаю никаких ошибок.Кажется, это скорее логическая ошибка, которую я не могу решить.

Вот мой текущий код:

import javax.swing.*;

public class test {

    private static  JLabel label;

    private static  JLabel label1;
    public static void main(String[] args){
        initializeLabel();
        initializeImage();
        initializeFrame();
    }

    private static void initializeLabel(){
         label = new JLabel();
         label.setText("hi");
         label.setLocation(54,338);
    }

    private static void initializeImage(){
        label1 = new JLabel();
        label1.setText("sss");
        label1.setLocation(55, 340);
    }

    private static void initializeFrame(){
        JFrame frame = new JFrame();
        frame.add(label1);
        frame.add(label);

        frame.setVisible(true);
    }

}// class

Ответы [ 4 ]

7 голосов
/ 08 ноября 2011

Измените ваш код следующим образом.

private static void initializeFrame(){
    JFrame frame = new JFrame();

    frame.setLayout(new FlowLayout()); // <-- you need this for now

    frame.add(label1);
    frame.add(label);
    frame.setVisible(true);

    // optional, but nice to have.
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
}

Пожалуйста, изучите больше о разметке свинга здесь: Визуальное руководство для менеджеров по макету

Для получения дополнительной информации: Создание GUI с JFC / Swing

4 голосов
/ 08 ноября 2011

Читать на Менеджеры по раскладке .Менеджер компоновки по умолчанию для фрейма - BorderLayout.Ваш код добавляет обе метки в центр макета.Это невозможно.Каждое местоположение в BorderLayout может содержать только один компонент (это может быть JPanel с другими компонентами).

Вам необходимо использовать другой менеджер макета.Не зная ваших точных требований, трудно предложить, какой менеджер компоновки использовать.

Кроме того, избавьтесь от всех этих статических методов.В учебнике по Swing есть много примеров, которые помогут вам лучше понять, как структурировать вашу программу.

3 голосов
/ 08 ноября 2011

Макет по умолчанию JFrame равен BorderLayout, а позиция по умолчанию - BorderLayout.CENTER.

Для удобства BorderLayout интерпретирует отсутствие спецификации строки так же, как константа CENTER.

По сути, вторая метка заменяет первую.

0 голосов
/ 08 ноября 2011

Добавьте frame.setLayout(new FlowLayout()); после построения кадра.

...