【问题标题】:Java Jtree mouseEvent if nothing is selectedJava Jtree mouseEvent 如果未选择任何内容
【发布时间】:2015-10-15 14:19:09
【问题描述】:

我试图弄清楚如何编写一个事件,如果在 Swing JTree 中单击并且鼠标没有单击树中的任何内容,则该事件会显示“无”的 println。

假设我有一棵带有 AWT.event.Mouwesvent 的树“info_tree”:

private void info_treeMouseClicked(java.awt.event.MouseEvent evt) {   
    if(info_tree.getSelectionPath() /*something along the lines of is empty or if !info_tree.getSelectionPath().isEmpty()*/
       ){system.out.println("Nothing");
      }else{
          system.out.println("Something");
      }
}

我找不到任何东西来比较 selectedPath 或树的元素。

【问题讨论】:

  • “我试图弄清楚如何编写一个事件,如果在 Swing JTree 中单击并且鼠标没有单击树中的任何内容,则得到一个 println 说“什么都没有“。” .. 为什么?

标签: java swing mouseevent jtree


【解决方案1】:

你不妨试试

If (info_tree.getSelectionPath()==null)

但是,您可能想要切换输出行。因为按原样是真/假条件。如果为假,它会转到其他地方。这样也能解决。

【讨论】:

  • 这确实解决了它。问题是,如果我在 JTree 面板中单击并且没有选择任何内容,我会得到一个 NullPointerException (当然是有道理的)。还解决了这个问题的是向树中添加一个默认选择器。 info_tree.setSelectionRow(0);
【解决方案2】:

你可以试试这个程序:

import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class JTreeGetSelectedNode extends JFrame {
    public JTreeGetSelectedNode() throws HeadlessException {
        initializeUI();
    }

    private void initializeUI() {
        setSize(200, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Countries");
        DefaultMutableTreeNode asia = new DefaultMutableTreeNode("Asia");
        String[] countries = new String[] {"India", "Singapore", "Indonesia", "Vietnam"};
        for (String country : countries) {
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(country);
            asia.add(node);
        }

        DefaultMutableTreeNode northAmerica = new DefaultMutableTreeNode("North America");
        countries = new String[] {"United States", "Canada"};
        for (String country : countries) {
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(country);
            northAmerica.add(node);
        }

        DefaultMutableTreeNode southAmerica = new DefaultMutableTreeNode("South America");
        countries = new String[] {"Brazil", "Argetina", "Uruguay"};
        for (String country : countries) {
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(country);
            southAmerica.add(node);
        }

        DefaultMutableTreeNode europe = new DefaultMutableTreeNode("Europe");
        countries = new String[] {"United Kingdom", "Germany", "Spain", "France", "Italy"};
        for (String country : countries) {
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(country);
            europe.add(node);
        }

        root.add(asia);
        root.add(northAmerica);
        root.add(southAmerica);
        root.add(europe);

        final JTree tree = new JTree(root);
        JScrollPane pane = new JScrollPane(tree);
        pane.setPreferredSize(new Dimension(200, 400));


        JButton button = new JButton("Get Selected");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object paths = tree.getLastSelectedPathComponent();

      if(paths == null){
      System.out.println("nothig");
      }else{
      System.out.println("Something");
      }
            }
        });

        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(pane, BorderLayout.CENTER);
        getContentPane().add(button, BorderLayout.SOUTH);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new JTreeGetSelectedNode().setVisible(true);
            }
        });
    }
}

【讨论】:

  • 这将部分解决这个问题。这样,您就消除了在选择 nithing 时单击的问题。所以通过替换它来消除点击的问题。这也是解决问题的一种方法。在我看来,这只是添加了不必要的代码。
  • 你把代码放在按钮里面。我想,会好的。
  • 重点是,如果没有从树中选择任何内容,你会得到一个NullPointerException,因为没有LastSelectedPathComponent
猜你喜欢
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
相关资源
最近更新 更多