Я создаю форму для пиццы и столкнулся с проблемой с классами JLabel и JCheckbox.
Я должен построить панель, которая имитирует инструкции по приготовлению пиццы, на ней должно быть множество флажков. В одном ряду должно быть 3 варианта, в другом - 2 варианта. Например:
Инструкции по приготовлению
♦ Cook Lite
♦ Экстра соус
♦ Легкий соус
♦ Хорошо сделано
♦ Легкий сыр
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 («Инструкции по приготовлению») оставался наверху ряда флажков независимо от количества флажков, которые могут быть там?
Также рассмотрите javax.swing.border.TitledBorder.
Внешний JPanel использует BorderLayout и удерживает JLabel в PAGE_START или верхней позиции. Он также содержит внутреннюю панель JPanel, которая использует GridLayout в ЦЕНТРАЛЬНОЙ позиции. Экспериментируйте, играйте, пробуйте, смотрите, что вы можете придумать




Вам нужно добавить новую 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, если вы не переопределяете ни один из его методов.
Как я могу изменить ширину и высоту между флажками?
@beginnerdev: посмотрите на разные конструкторы GridLayout. Есть один, который принимает 4 параметра, включая пробелы
Вложите JPanels, каждая из которых использует свой собственный макет, что означает, что вы будете схемы раскроя.