Один из способов сделать это - передать экземпляр (использовать вашу терминологию) Jpanel1 в Jpanel2. Это не нужно делать в конструкторе, например, вы можете использовать метод setConnectedPanel(JPanel)
.
Вот код, который показывает, что вы хотите сделать:
MyFrame.java
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame {
public MyFrame() {
ReactionPanel rp = new ReactionPanel();
ActionPanel ap = new ActionPanel(rp);
setLayout(new GridLayout(2, 1));
add(ap);
add(rp);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MyFrame();
}
});
}
}
ActionPanel.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class ActionPanel extends JPanel implements ActionListener {
private ReactionPanel rp;
private JButton button;
public ActionPanel(ReactionPanel rp) {
this.rp = rp;
button = new JButton("Click");
button.addActionListener(this);
this.add(button);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(button)) {
rp.react();
}
}
}
ReactionPanel.java
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ReactionPanel extends JPanel {
private JLabel label;
public ReactionPanel() {
label = new JLabel("PING");
this.add(label);
}
public void react() {
if(label.getText().equals("PING")) {
label.setText("PONG");
} else {
label.setText("PING");
}
}
}
Как вы можете видеть, я стараюсь переопределить все мои JFrames/JPanels, когда я пишу Swing GUI, поскольку мне становится проще и гибче, но YMMV.
Показать ваш код было бы полезно. Опубликовать [SSCCE] (http://sscce.org) было бы лучше. – Jeffrey
У вас, вероятно, не должно быть 1 'JFrame' и 2' JPanel' * классов * столько, сколько * экземпляров * (стандартного компонента). Кроме того, он будет платить за то, чтобы ваши имена классов/экземпляров были менее абстрактными, в этой панели 1 может быть 'userDetails', а панель 2 может быть' userControls', что дает нам лучшее представление о конечной цели и тем лучше шанс предоставить оптимальные рекомендации. –