84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
两个类,分别的两个jpanel,一个panel为jlist监听,一个里边是button,想实现jlist 触发按钮的状态改变,大概的思路是什么?
学习是最好的投资!
如果两个 JPanel 都是在一个 JWindow/JFrame 中实例化的,button 和 list 肯定可以互相访问。
如果是分别继承出来的,在 button 所在的那个 JPanel 里加个接口或者做个代理就可以了。给你写了段示意
import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel { JButton button; public MyPanel() { button = new JButton("Add To List"); } // 方法二,直接把 button 暴露出来 public JButton getButton() { return button; } // 方法一,做个 button.addActionListner 的代理 public void addButtonListener(ActionListener listener) { button.addActionListener(listener); } } class ListPanel extends JPanel { public void addToList(String item) { // TODO } } public class Test { MyPanel myPanel; ListPanel listPanel; // .... void setupEvents() { // 方法一实现 myPanel.addButtonListener(e -> { listPanel.addToList("hello"); }); // 方法二实现 myPanel.getButton().addActionListener(e -> { listPanel.addToList("world"); }); } }
如果两个 JPanel 都是在一个 JWindow/JFrame 中实例化的,button 和 list 肯定可以互相访问。
如果是分别继承出来的,在 button 所在的那个 JPanel 里加个接口或者做个代理就可以了。给你写了段示意