gpt4 book ai didi

Java设计架构

转载 作者:行者123 更新时间:2023-12-01 22:10:28 24 4
gpt4 key购买 nike

我的问题是

如果我有一个 Jpanel,其中有一些 JtextField 和 ComboBox。另一个 JPanel 包含“保存”、“更新”、“清除”、“退出”等按钮。

JPanel 和 BoarderLayout 都添加到 JFrame 中。

如果我在文本字段中写一些内容并按保存按钮,它会将数据保存到数据库中。我知道数据库的连接代码。

问题是文本面板和按钮面板之间的连接。如果我将 JTextField 和 JButtons 设为公共(public),我可以在 JFrame 中访问它们并实现 Listners 以将数据保存到数据库中,但我想这不是正确的做法。

请指导我如何正确执行此操作。

这是测试代码。

按钮面板:

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JPanel;

public class Buttons extends JPanel{

JButton btnSave, btnUpdate, btnClear, btnExit;

public Buttons(){

btnSave = new JButton("Save");
btnUpdate = new JButton("Update");
btnClear = new JButton("Clear");
btnExit = new JButton("Exit");


setLayout(new FlowLayout());

add(btnSave);
add(btnUpdate);
add(btnClear);
add(btnExit);

setSize(100,100);

}
}

文本面板

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
*
* @author Aqeel
*/
public class textPanel extends JPanel{

JLabel ID , Name;
JTextField txtID, txtName;

GridBagConstraints gridBagConstraints;

public textPanel(){

ID = new JLabel("ID:");
Name = new JLabel("Name:");

txtID = new JTextField(10);
txtName = new JTextField(10);


setLayout(new GridBagLayout());


add(ID, new GridBagConstraints());
add(txtID, new GridBagConstraints());

gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
add(Name, gridBagConstraints);


gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
add(txtName, gridBagConstraints);

setSize(300,200);
}

}

Jframe

 import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.UnsupportedLookAndFeelException;
import org.openide.util.Exceptions;
/**
*
* @author Aqeel
*/
public class Jframe extends JFrame
{
textPanel textpanel;
Buttons buttons;

public Jframe() {

textpanel = new textPanel();
buttons = new Buttons();

setLayout(new BorderLayout());

add(textpanel, BorderLayout.CENTER);
add(buttons, BorderLayout.SOUTH);

setSize(400, 200);

buttons.btnSave.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
String ID = textpanel.txtID.getText();
String Name = textpanel.txtName.getText();

System.out.println(ID);
System.out.println(Name);
}
});

buttons.btnExit.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}

public static void main(String args[])
throws ClassNotFoundException, InstantiationException, UnsupportedLookAndFeelException
{

try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()
) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;
}
}
} catch (IllegalAccessException ex) {
Exceptions.printStackTrace(ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Jframe().setVisible(true);
}
});
}
}

最佳答案

隔离特定实现中使用的组件是一个很好的做法。您可以改为关注每个 JPanel 的角色。TextPanel 的作用是接收 Id 和 Name 的文本输入,Buttons JPanel 的作用是触发特定操作。

实现此目的的一个简单方法是,在 TextPanel 类中创建一个 getter,该 getter 返回一个用于 id 的字符串和另一个用于名称的字符串,而不是直接访问 JButton 和 JTextField 组件(将它们设为公共(public)或通过 getter)。

public class textPanel  extends JPanel{

JLabel ID , Name;
JTextField txtID, txtName;
...
public String getId()
{
return txtID.getText();
}

public String getName()
{
return txtName.getText();
}
}

对于 Buttons 类,为每个操作创建一个包含方法的接口(interface)。

public class Buttons extends JPanel{

private JButton btnSave, btnUpdate, btnClear, btnExit;
private ButtonsActions actionsListener;

public Buttons(ButtonsActions actionsListener){
this.actionsListener = actionsListener;

btnSave.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
actionsListener.onSave();
}
});
...
}

public interface ButtonsActions {
public void onSave();
public void onUpdate();
public void onClear();
public void onExit();
}
}

然后,Jframe 类将能够实现此接口(interface)并在单击按钮时对操作使用react。

将实现与每个面板隔离的原因之一是,假设您稍后将“按钮”面板更改为具有一个列出所有操作选项的 JRadioButton 和一个用于触发所选操作的应用按钮。或者,如果您更改 TextPanel 以提供 JComboBox 而不是简单的 JTextField。在任何这些情况下,您都必须更改代码中使用 Button 或 TextPanel 类的所有位置才能使用新的屏幕设计。

关于Java设计架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915347/

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