Добавление экземпляра класса различных компонентов свинга в JPanel - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь создать сетку из различных элементов, которые отображаются на JPanel, как показано здесь:

        JPanel secondPanel = new JPanel();

        secondPanel.setBounds(345,40,640,700);
        secondPanel.setBackground(new java.awt.Color(90,90,100));
        // Here secondPanel is given a gridlayout.  So the items appear in a gridded look.
        secondPanel.setLayout(new GridLayout(3,3,50,50));
        frame.add(secondPanel);

// The following are used as an example of different JPanels.  I am using this to give a demonstration of how the item layout would sort of look like.

        secondPanel.add(new JPanel());
        secondPanel.add(new JPanel());
        secondPanel.add(new JPanel());
        secondPanel.add(new JPanel());
        secondPanel.add(new JPanel());
        secondPanel.add(new JPanel());
        secondPanel.add(new JPanel());
        secondPanel.add(new JPanel());
        secondPanel.add(new JPanel());

Однако каждый элемент имеет одинаковые свойства.Все они имеют поле выбора.У них у всех есть JPanel, у них у всех есть фрагмент текста и т. Д. Я подумал, что будет проще просто создать класс, который имеет все эти значения, а затем добавить их в JPanel, каждый из которых является отдельным экземпляром.

Class:

import javax.swing.JPanel;
import javax.swing.JCheckBox;
import javax.swing.JLabel;

public class itemClass {

    itemClass(String name, double cost){

        JPanel box = new JPanel();
        JLabel nameLabel = new JLabel();
        nameLabel.setText(name);
        JCheckBox selectBox = new JCheckBox("$ "+cost);
        box.setForeground(new java.awt.Color(80,80,90));
        box.setSize(50, 50);
        box.add(selectBox);

    }
}

И здесь я пытаюсь создать экземпляры классов и добавить их на эту панель, используя метод add:

for (int i = 0; i < 9; i ++) {
            secondPanel.add(new itemClass("T-Shirt",20));
        }

Проблема в том, чтоadd метод не принимает в случаях itemClass.Итак, я ищу способ создать класс различных компонентов свинга и затем добавить их на панель secondPanel.

1 Ответ

2 голосов
/ 25 сентября 2019

Вы можете написать это примерно так:

import javax.swing.JPanel;
import javax.swing.JCheckBox;
import javax.swing.JLabel;

public class ItemPanel extends JPanel {

    ItemPanel(String name, double cost){
        JLabel nameLabel = new JLabel();
        nameLabel.setText(name);
        this.add(nameLabel);  // added this!
        JCheckBox selectBox = new JCheckBox("$ " + cost);
        this.setForeground(new java.awt.Color(80, 80, 90));
        this.setSize(50, 50);
        this.add(selectBox);
    }
}

Главное, чтобы ваш ItemPanel класс нуждался в расширении некоторого класса, который расширяет JComponent.Расширение JPanel является очевидным выбором, потому что в этом случае вам нужно поведение "панели".

Другой способ сделать это - превратить ваш конструктор класса + в простой метод, который создает JPanel,заполняет его, а затем возвращает.


Другие пункты:

  1. Имена классов должны всегда начинаться с заглавной буквы.Без исключений.

  2. Имена классов должны выбираться тщательно:

    • Они должны описывать (или, по крайней мере, указывать) цель класса;Например, ItemPanel - это панель, которая отображает «элемент».
    • Добавление Class в конце имени не является идиоматическим.Вы не называете свою собаку "Fido Dog" ... и вы не видите таких имен в библиотеках Java SE 1 .
    • Действительно, суффикс Class фактически вводит в заблуждение, поскольку предполагает , что экземпляр (скажем) ItemClass является представлением из класса Java.(Это не так. Это представление компонента пользовательского интерфейса!)

1 - есть одно или два исключения, ноэто не относится к делу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...