gpt4 book ai didi

java - 在两个 JPanel 对象之间发送消息

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:06 24 4
gpt4 key购买 nike

我有一个包含 JPanel 的 Java JFrame。在该 JPanel 中,有两个独立的 JPanel。当用户单击第一个 JPanel 中的按钮时,需要向另一个 JPanel 发送一条消息,通知它单击了哪个按钮。在这样的对象之间发送消息的最简单方法是什么?

最佳答案

对于 mKorbel(和原始海报):
我推荐的是更松散的耦合,一个 JPanel 不知道另一个 JPanel,并且所有连接都是通过某种控件完成的。例如,借用你的一些代码:

复制TextNorthPanel2.java

import java.awt.*;
import javax.swing.*;

public class CopyTextNorthPanel2 extends JPanel {

private static final long serialVersionUID = 1L;
public JTextField northField;

public CopyTextNorthPanel2() {
northField = new JTextField("Welcome World");
northField.setFont(new Font("Serif", Font.BOLD, 20));
northField.setPreferredSize(new Dimension(300, 25));
add(northField);
}

public String getNorthFieldText() {
return northField.getText();
}
}

复制TextSouthPanel2.java

import java.awt.event.*;
import javax.swing.*;

public class CopyTextSouthPanel2 extends JPanel {

private static final long serialVersionUID = 1L;
private JTextField firstText = new JTextField("Desired TextField");
private JButton copyButton = new JButton("Copy text from JTextFields");
private CopyTextControl2 control;

public CopyTextSouthPanel2() {
copyButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (control != null) {
control.copyAction();
}
}
});

add(firstText);
add(copyButton);
}

public void setControl(CopyTextControl2 control) {
this.control = control;
}

public void setFirstText(String text) {
firstText.setText(text);
}
}

CopyTextControl2.java

public class CopyTextControl2 {
private CopyTextNorthPanel2 northPanel;
private CopyTextSouthPanel2 southPanel;

public void copyAction() {
if (northPanel != null && southPanel != null) {
southPanel.setFirstText(northPanel.getNorthFieldText());
}
}

public void setNorthPanel(CopyTextNorthPanel2 northPanel) {
this.northPanel = northPanel;
}

public void setSouthPanel(CopyTextSouthPanel2 southPanel) {
this.southPanel = southPanel;
}

}

复制文本2.java

import java.awt.*;
import javax.swing.*;

public class CopyText2 {

private static void createAndShowUI() {
CopyTextNorthPanel2 northPanel = new CopyTextNorthPanel2();
CopyTextSouthPanel2 southPanel = new CopyTextSouthPanel2();
CopyTextControl2 control = new CopyTextControl2();

southPanel.setControl(control);
control.setNorthPanel(northPanel);
control.setSouthPanel(southPanel);

JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(northPanel, BorderLayout.NORTH);
mainPanel.add(Box.createRigidArea(new Dimension(100, 100)), BorderLayout.CENTER);
mainPanel.add(southPanel, BorderLayout.SOUTH);

JFrame frame = new JFrame("Copy Text");
frame.getContentPane().add(mainPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}

关于java - 在两个 JPanel 对象之间发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053283/

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