gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:01 25 4
gpt4 key购买 nike

我有一个关于如何从另一个类调用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com