java - 从其他类调用java swing控件和容器

标签 java swing

我有一个关于如何从另一个类调用 Java 控件和容器的问题。我有两个想法。

  • 封装容器以便使用 GET 方法。
  • 将属性从私有(private)切换为公共(public)

哪个最好?或者还有其他的吗?

提前致谢

最佳答案

在考虑“提供 getters”与“公开属性”的选项时,“提供 getters”绝对是更好的选择。

但是,在这种特殊情况下,我认为我们可以做得更好。也就是说,我们可以在容器中提供有意义的操作(方法),而不是暴露容器的内部细节。我将尝试用下面的例子来解释这个概念。

在这里,我建议通过 getNameFieldgetContactNumberField getter 进行 setCustomer 操作。

(为了保持此代码片段简单,我将所有内容都放在一个类中。但在实际场景中,framecustomerPanel 将拥有自己单独的类。)

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);
  }
}

关于java - 从其他类调用java swing控件和容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53859273/

相关文章:

java - 使用浮点或整数数组计算 Pi

java - 如何在不使用 main 方法或调用其他方法的情况下设置 contentPane?

java - 参数内的方法? Java Swing

java - JTextPane 文本背景颜色不起作用

java - 如何使用 awt.Robot 以 native hdpi 分辨率捕获屏幕截图?

java - 将模拟添加到集合适用于 .times,而不适用于 for 循环

java - 具有多个父节点的 DocumentBuilderFactory

java - 从当前jsp页面注销到登录页面

java - 第一次执行服务时如何获取最后已知位置?

java - Jar 文件初始化程序异常