Вызовите java swing control и контейнер из другого класса - PullRequest
0 голосов
/ 20 декабря 2018

У меня вопрос о том, как вызывать элементы управления Java и контейнеры из другого класса.У меня есть 2 идеи.

  • Инкапсуляция контейнеров для использования метода GET.
  • Переключение свойства с частного на общедоступное

Что лучше?Или есть еще один?

Заранее спасибо

1 Ответ

0 голосов
/ 22 декабря 2018

При рассмотрении вариантов «предоставления геттеров» по ​​сравнению с «обнародованием свойств» «предоставление геттеров», безусловно, является лучшим вариантом.

Однако, в этом конкретном сценарии, я думаю, мы можем добиться еще лучших результатов.То есть вместо того, чтобы раскрывать внутренние детали контейнера, мы можем предоставить значимые операции (методы) в контейнере.Я попытаюсь объяснить эту концепцию с помощью приведенного ниже примера.

Здесь я рекомендую setCustomer операцию над геттерами getNameField и getContactNumberField.

(Чтобы этот фрагмент кода был простым, ямы поместили все в один класс, но в реальном сценарии frame и customerPanel будут иметь свои отдельные классы.)

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.BorderLayout;

public class CustomerPanel extends JPanel
{
  private JTextField nameField = new JTextField(20);
  private JTextField contactNumberField = new JTextField(20);

  public CustomerPanel()
  {
    add(new JLabel("Name:"));
    add(nameField);
    add(new JLabel("Contact number:"));
    add(contactNumberField);
  }

  // Recommended approach
  public void setCustomer(String name, String contact)
  {
    nameField.setText(name);
    contactNumberField.setText(contact);
  }

  // Inferior approach. Hence commented out
  //public JTextField getNameField()
  //{
  //  return nameField;
  //}

  // Inferior approach. Hence commented out
  //public JTextField getContactNumberField()
  //{
  //  return contactNumberField;
  //}

  public static void main(String[] args)
  {
    // Recommended approach
    CustomerPanel customerPanel = new CustomerPanel();
    customerPanel.setCustomer("Kevin James", "72362282");

    // Inferior approach. Hence commented out
    //customerPanel.getNameField().setText("Kevin James");
    //customerPanel.getContactNumberField().setText("72362282");

    JFrame frame = new JFrame("Customers");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(customerPanel, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...