Создание объектов JPanel с помощью Map

155
14 марта 2019, 02:40

подскажите, имеется следующий класс

public class View extends JFrame {
    public View(String label) throws HeadlessException {
        super(label);
        super.setSize(500, 700);
        super.setLocationRelativeTo(null);
        this.setLayout(new GridLayout(25,2));
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setResizable(false);
//Фамилия
        JPanel panelPersonFamily=new JPanel();
        panelPersonFamily.setBorder(BorderFactory.createEmptyBorder(2,5,2,5));
        panelPersonFamily.setLayout(new GridLayout(1,2));
        JLabel jlabelPersonFamily=new JLabel("Фамилия");
        JTextField jTextFieldPersonFamily=new JTextField();
        panelPersonFamily.add(jlabelPersonFamily);
        panelPersonFamily.add(jTextFieldPersonFamily);
//Имя
        JPanel panelPersonName=new JPanel();
        panelPersonName.setBorder(BorderFactory.createEmptyBorder(2,5,2,5));
        panelPersonName.setLayout(new GridLayout(1,2));
        JLabel jlabelPersonName=new JLabel("Имя");
        JTextField jTextFieldPersonName=new JTextField();
        panelPersonName.add(jlabelPersonName);
        panelPersonName.add(jTextFieldPersonName);
//Отчество
        JPanel panelPersonFatherName=new JPanel();
        panelPersonFatherName.setBorder(BorderFactory.createEmptyBorder(2,5,2,5));
        panelPersonFatherName.setLayout(new GridLayout(1,2));
        JLabel jlabelPersonFatherName=new JLabel("Отчество");
        JTextField jTextFieldPersonFatherName=new JTextField();
        panelPersonFatherName.add(jlabelPersonFatherName);
        panelPersonFatherName.add(jTextFieldPersonFatherName);

        this.getContentPane().add(panelPersonFamily);
        this.getContentPane().add(panelPersonName);
        this.getContentPane().add(panelPersonFatherName);
    }
}

При создании фамилии, имени и отчества одинаковый код, можно ли все вынести в отдельный метод в который передавать map содержащий ключ - текст объекта JLabel, а значение название переменной объекта JTextField? ("Фамилия" - jTextFieldPersonFamily). Спасибо.

Answer 1

Создать интерфейс

public interface InterJPanel {
  public JPanel getPanel();
}

Создать отдельный объект

public class PersonValue implements InterJPanel {
  private JPanel personValue;
  public PersonValue(String value) {
        personValue=new JPanel();
        personValue.setBorder(BorderFactory.createEmptyBorder(2,5,2,5));
        personValue.setLayout(new GridLayout(1,2));
        JLabel jlabelPersonName=new JLabel(value);
        JTextField jTextFieldPersonName=new JTextField();
        personValue.add(jlabelPersonName);
        personValue.add(jTextFieldPersonName);
  }
  @Override
  public JPanel getPanel() {
    return personValue;
  }
}

Вот итог:

InterJPanel panel1 = new PersonValue("Фамилия");
InterJPanel panel2 = new PersonValue("Имя");
InterJPanel panel3 = new PersonValue("Отчество");

Далее с помощью геттеров получаем из классов их JPanel:

this.getContentPane().add(panel1.getPanel());
this.getContentPane().add(panel2.getPanel());
this.getContentPane().add(panel3.getPanel());

P.S. Переходите на javaFX, swing устарел, не вижу смысла учить даже. Повторите приницы ООП. Изучите что такое геттеры и сеттеры. Код писал на коленках, могут быть ошибки.

READ ALSO
Смена jdk на 11 версию

Смена jdk на 11 версию

Подскажите, после установки jdk-110

171
Объясните что происходит в метадах findViewById и findViewTraversal

Объясните что происходит в метадах findViewById и findViewTraversal

Охота понять что конкретно происходит в этих методахЗаходим в класс View и видим вот что:

230
Java android connect to wifi

Java android connect to wifi

можете подсказать, в чем ошибка?

134
Кастомная авторизация Spring REST API

Кастомная авторизация Spring REST API

Как грамотно и удобно организовать аутентификацию в Spring REST Api через JWT? Сессию не хочу использовать, потому что это REST и JWTПроверка токена должна...

196