Как добавить текст JLabel поверх нескольких флажков?

Я создаю форму для пиццы и столкнулся с проблемой с классами JLabel и JCheckbox.

Я должен построить панель, которая имитирует инструкции по приготовлению пиццы, на ней должно быть множество флажков. В одном ряду должно быть 3 варианта, в другом - 2 варианта. Например:
Инструкции по приготовлению
♦ Cook Lite ♦ Экстра соус
♦ Легкий соус ♦ Хорошо сделано
♦ Легкий сыр

Однако вот что я получаю:
Как добавить текст JLabel поверх нескольких флажков?

public CookingInstructions() {

    JLabel label1 = new JLabel();
    label1.setText("Cooking Instructions");
    setLayout(new GridLayout(0,2));
    add(label1);
    cookLite = new JCheckBox("Cook Lite");
    extraSauce = new JCheckBox("Extra Sauce");
    lightSauce = new JCheckBox("Light Sauce");
    wellDone = new JCheckBox("Well Done");
    lightCheese = new JCheckBox("Light Cheese");

    add(cookLite);
    add(extraSauce);
    add(lightSauce);
    add(wellDone);
    add(lightCheese);
}

Как я могу сделать так, чтобы JLabel («Инструкции по приготовлению») оставался наверху ряда флажков независимо от количества флажков, которые могут быть там?

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

Hovercraft Full Of Eels 18.10.2018 00:14

Также рассмотрите javax.swing.border.TitledBorder.

trashgod 18.10.2018 00:15

Внешний JPanel использует BorderLayout и удерживает JLabel в PAGE_START или верхней позиции. Он также содержит внутреннюю панель JPanel, которая использует GridLayout в ЦЕНТРАЛЬНОЙ позиции. Экспериментируйте, играйте, пробуйте, смотрите, что вы можете придумать

Hovercraft Full Of Eels 18.10.2018 00:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно добавить новую Jpanel, которая содержит все JCheckBox. Затем вы комбинируете Jlabel и Jpanel с BorderLayout. Вот реализация.

package javaapplication7;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;  
public class JavaApplication7 extends JFrame {
    JCheckBox cookLite,extraSauce,lightSauce,wellDone,lightCheese;

    JavaApplication7(){  



        JLabel label1 = new JLabel();
        label1.setText("Cooking Instructions");

        setLayout(new BorderLayout());
        add(label1,BorderLayout.NORTH);

        cookLite = new JCheckBox("Cook Lite");
        extraSauce = new JCheckBox("Extra Sauce");
        lightSauce = new JCheckBox("Light Sauce");
        wellDone = new JCheckBox("Well Done");
        lightCheese = new JCheckBox("Light Cheese");

        JPanel panel=new JPanel();
        panel.setLayout(new GridLayout(0,2));
        panel.add(cookLite);
        panel.add(extraSauce);
        panel.add(lightSauce);
        panel.add(wellDone);
        panel.add(lightCheese);

        add(panel,BorderLayout.CENTER);

        setSize(400,500); 
        setVisible(true);  

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

}

Надеюсь, что это поможет

1) Используйте BorderLayout.PAGE_START предпочтительно вместо BorderLayout.NORTH. 2) Никогда не рекомендуйте setSize(...), так как вы можете действительно испортить макет и его гибкость, изменив размер таким образом. Вместо pack() окно верхнего уровня вашего графического интерфейса (здесь JFrame) после добавления компонентов и до того, как вы сделаете его видимым. 3) Избегайте расширения JFrame, если вы не переопределяете ни один из его методов.

Hovercraft Full Of Eels 18.10.2018 00:29

Как я могу изменить ширину и высоту между флажками?

user10026693 18.10.2018 00:42

@beginnerdev: посмотрите на разные конструкторы GridLayout. Есть один, который принимает 4 параметра, включая пробелы

Hovercraft Full Of Eels 18.10.2018 00:57

Другие вопросы по теме