Java 类1作为接口,类2侦听器必须在类1中执行某些操作

Java 类1作为接口,类2侦听器必须在类1中执行某些操作,java,tree,action,listener,class-reference,Java,Tree,Action,Listener,Class Reference,实际上,我正在玩一点Java来了解更多 我有一个用作主界面的类,我在其中添加了一些其他类和一些GUI元素 public class JfrmInterfaceMain extends JFrame { private JPanel contentPane; private JpnlInterfaceMusic jpnlInterfaceMusic = new JpnlInterfaceMusic(); private JpnlInterfaceVideo jpnlInterfaceVideo

实际上,我正在玩一点Java来了解更多

我有一个用作主界面的类,我在其中添加了一些其他类和一些GUI元素

public class JfrmInterfaceMain extends JFrame {

private JPanel contentPane;
private JpnlInterfaceMusic jpnlInterfaceMusic = new JpnlInterfaceMusic();
private JpnlInterfaceVideo jpnlInterfaceVideo = new JpnlInterfaceVideo();
private JpnlInterfaceLibraryTree jpnlInterfaceLibraryTree = new JpnlInterfaceLibraryTree();
private JPanel panel;
private JPanel panel_1;
private JPanel panel_3;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                JfrmInterfaceMain frame = new JfrmInterfaceMain();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public JfrmInterfaceMain() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 1200, 800);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    contentPane.setLayout(new BorderLayout(0, 0));
    setContentPane(contentPane);

    panel = new JPanel();
    contentPane.add(panel, BorderLayout.NORTH);

    panel_1 = new JPanel();
    GridBagLayout gbl_panel_1 = new GridBagLayout();
    gbl_panel_1.columnWidths = new int[] { 200, 0 };
    gbl_panel_1.rowWeights = new double[] { 1.0 };
    gbl_panel_1.columnWeights = new double[] { 0.0, 1.0 };
    panel_1.setLayout(gbl_panel_1);
    contentPane.add(panel_1, BorderLayout.CENTER);

    GridBagConstraints gbcJpnlInterfaceLibraryTree = new GridBagConstraints();
    gbcJpnlInterfaceLibraryTree.insets = new Insets(0, 0, 0, 5);
    gbcJpnlInterfaceLibraryTree.fill = GridBagConstraints.BOTH;
    gbcJpnlInterfaceLibraryTree.gridx = 0;
    gbcJpnlInterfaceLibraryTree.gridy = 0;
    panel_1.add(jpnlInterfaceLibraryTree, gbcJpnlInterfaceLibraryTree);

    panel_3 = new JPanel();
    panel_3.setLayout(new CardLayout());
    GridBagConstraints gbc_panel_3 = new GridBagConstraints();
    gbc_panel_3.insets = new Insets(0, 0, 0, 5);
    gbc_panel_3.fill = GridBagConstraints.BOTH;
    gbc_panel_3.gridx = 1;
    gbc_panel_3.gridy = 0;
    panel_1.add(panel_3, gbc_panel_3);
    panel_3.add(jpnlInterfaceMusic);
    panel_3.add(jpnlInterfaceVideo);

    JButton btnNewButton = new JButton("Video");
    panel.add(btnNewButton);
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            SetVideoActive();
        }
    });

    JButton btnNewButton_1 = new JButton("Music");
    panel.add(btnNewButton_1);
    btnNewButton_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            SetMusicActive();
        }
    });

    setVisible(true);
}

public void SetVideoActive() {
    jpnlInterfaceVideo.setVisible(true);
    jpnlInterfaceMusic.setVisible(false);
}

public void SetMusicActive() {
    jpnlInterfaceMusic.setVisible(true);
    jpnlInterfaceVideo.setVisible(false);
}
这是我遇到问题的第二节课

private JpnlInterfaceLibraryTree jpnlInterfaceLibraryTree = new JpnlInterfaceLibraryTree();

public class JpnlInterfaceLibraryTree extends JPanel implements
    TreeSelectionListener {

private JTree tree;
private JfrmInterfaceMain jfrmInterfaceMain;
private String selectedNode;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                JfrmInterfaceMain frame = new JfrmInterfaceMain();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public JpnlInterfaceLibraryTree() {
    this.setLayout(new GridLayout(0, 1, 0, 0));

    DefaultMutableTreeNode dmtnTitle = new DefaultMutableTreeNode(
            "Medien (lokal)");
    createNodes(dmtnTitle);

    tree = new JTree(dmtnTitle);
    tree.putClientProperty("JTree.lineStyle", "lineStyle");
    tree.getSelectionModel().setSelectionMode(
            TreeSelectionModel.SINGLE_TREE_SELECTION);
    tree.addTreeSelectionListener(this);

    JScrollPane treeView = new JScrollPane(tree);
    this.add(treeView);
}

private void createNodes(DefaultMutableTreeNode dmtnTitle) {
    DefaultMutableTreeNode dmtnCategory = null;

    dmtnCategory = new DefaultMutableTreeNode("Audio");
    dmtnTitle.add(dmtnCategory);

    dmtnCategory = new DefaultMutableTreeNode("Video");
    dmtnTitle.add(dmtnCategory);
}

public void valueChanged(TreeSelectionEvent e) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
            .getLastSelectedPathComponent();
    if (node == null) {
        selectedNode = null;
    }

    selectedNode = node.toString();
}

public String getValue() {
    return selectedNode;
}
我的目标是,像主界面中的两个按钮一样,根据TreeSelection切换Viode/音乐。 在1班,我可以用按钮切换视频/音乐。 在第2类中,我得到了当一个节点被选择时,选择哪个节点的字符串

但我不知道如何将一班的视频/音乐从二班切换到另一班。 或者我必须实现类1的侦听器吗