Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 双击JList元素上的事件_Java_Swing_Mouseevent_Jlist - Fatal编程技术网

Java 双击JList元素上的事件

Java 双击JList元素上的事件,java,swing,mouseevent,jlist,Java,Swing,Mouseevent,Jlist,我有个问题,我自己找不到答案。 我正在用java进行一次简单的聊天,我用名字填充了一个JList。双击名称时,需要将该名称作为参数传递给另一个框架(作为收件人名称)。但是,双击不起作用 我有一个主类InstantMessageFrame,其中名为friends的JList被初始化并用字符串数组填充 private JList<String> friends; String names[] = { "Ana", "Banana", "Cikla", "Doris", "Ema", "M

我有个问题,我自己找不到答案。 我正在用java进行一次简单的聊天,我用名字填充了一个JList。双击名称时,需要将该名称作为参数传递给另一个框架(作为收件人名称)。但是,双击不起作用

我有一个主类InstantMessageFrame,其中名为friends的JList被初始化并用字符串数组填充

private JList<String> friends;
String names[] = { "Ana", "Banana", "Cikla", "Doris", "Ema", "Mirna","Matea","Veronika","Vera","Marta","Mirta","Davor","Marko","Matko","Kloki" };
JList<String> friends = new JList<String>(names);
这是我的DisplayMessageDialog类,它检查是否有双击。如果双击,将显示一个新帧。第一个“if”语句中的任何一行都不会执行(其中一行带有e.getClickCount()

它应该是这样的:

双击时,会出现一个新的帧(在代码“InstantMessageDialog”对象中)


它应该是这样的。

因此,通过处理上下文之外的代码片段,这个示例似乎可以很好地工作,因此我只能猜测,您的问题在于代码中没有向我们展示的其他地方

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JList<String> friends;

        public TestPane() {
            String names[] = {"Ana", "Banana", "Cikla", "Doris", "Ema", "Mirna", "Matea", "Veronika", "Vera", "Marta", "Mirta", "Davor", "Marko", "Matko", "Kloki"};
            JList<String> friends = new JList<String>(names);

            setLayout(new BorderLayout());
            add(new JScrollPane(friends));

            DisplayMessageDialog dmd = new DisplayMessageDialog();
            friends.addMouseListener(dmd);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            g2d.dispose();
        }

    }

    public class DisplayMessageDialog extends MouseAdapter {

        public void mouseClicked(MouseEvent e) {
            JList theList = (JList) e.getSource();
            //              if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
            if (e.getClickCount() == 2) {
                int index = theList.locationToIndex(e.getPoint());
                if (index >= 0) {
                    Object o = theList.getModel().getElementAt(index);
                            //InstantMessageDialog imd = new InstantMessageDialog(null, o.toString());
                    //imd.setVisible(true);
                    JOptionPane.showMessageDialog(theList, "Double-clicked on: " + o.toString());
                    System.out.println("Double-clicked on: " + o.toString());
                }
            }
        }
    }
}
假设您真的只想响应鼠标左键单击

双击名称时

在设计GUI时,为鼠标和键盘提供支持总是一个好主意

退房。它将
操作
支持添加到
JList
。您只需提供
操作
。然后可以通过以下方式调用
操作

  • 双击,或
  • 使用回车键 但是,双击不起作用

    使用Enter键测试操作以验证其是否有效。如果确实如此,请尝试双击。如果双击不起作用,则将
    ListAction
    中的
    mouseClicked
    方法更改为
    mousePressed


    mousePressed
    事件更可靠,因为只有在为同一像素生成mousePressed/mouseerelease事件时才会生成
    mouseClicked
    事件。因此,如果鼠标移动1个像素,则不会生成鼠标单击事件。

    “但是,双击不起作用…”
    --请详细说明,因为“不起作用”本身对我们来说非常令人沮丧,因为它告诉我们没有任何用处。你这到底是什么意思?它怎么不起作用?你遇到了什么问题?您尝试调试此文件时发现了什么?也可以考虑发布A。我的意思是不起作用。当我双击JLIST中的名字时,什么都没有改变,没有任何事情发生,就像我没有给JLISTAY添加一个侦听器来提供一个演示你的问题一样。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应。我认为您需要创建并发布您的日志,以便我们猜测哪些不起作用。请点击链接。请重新阅读由两位不同的Swing专家给出的4次链接。如果链接中的任何内容让您感到困惑,请要求澄清。我测试了该程序,并将我的一些代码更改为您的代码,并意识到问题出在我的getFriendsPane中,我将JList friends添加到JScrollPane中,因此我删除了我的方法,并将其替换为add(新的JScrollPane(friends));
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class DisplayMessageDialog extends MouseAdapter
    {
        public void mouseClicked(MouseEvent e)
        {
            JList theList = (JList) e.getSource();
            if (e.getClickCount() == 2) 
            {
                int index = theList.locationToIndex(e.getPoint());
                if (index >= 0) 
                {
                    Object o = theList.getModel().getElementAt(index);
                    InstantMessageDialog imd = new InstantMessageDialog(null, o.toString());
                    imd.setVisible(true);
                System.out.println("Double-clicked on: " + o.toString());
                }
            }
        }
    }
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class Test {
    
        public static void main(String[] args) {
            new Test();
        }
    
        public Test() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                        ex.printStackTrace();
                    }
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(new TestPane());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TestPane extends JPanel {
    
            private JList<String> friends;
    
            public TestPane() {
                String names[] = {"Ana", "Banana", "Cikla", "Doris", "Ema", "Mirna", "Matea", "Veronika", "Vera", "Marta", "Mirta", "Davor", "Marko", "Matko", "Kloki"};
                JList<String> friends = new JList<String>(names);
    
                setLayout(new BorderLayout());
                add(new JScrollPane(friends));
    
                DisplayMessageDialog dmd = new DisplayMessageDialog();
                friends.addMouseListener(dmd);
            }
    
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 200);
            }
    
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                Graphics2D g2d = (Graphics2D) g.create();
                g2d.dispose();
            }
    
        }
    
        public class DisplayMessageDialog extends MouseAdapter {
    
            public void mouseClicked(MouseEvent e) {
                JList theList = (JList) e.getSource();
                //              if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
                if (e.getClickCount() == 2) {
                    int index = theList.locationToIndex(e.getPoint());
                    if (index >= 0) {
                        Object o = theList.getModel().getElementAt(index);
                                //InstantMessageDialog imd = new InstantMessageDialog(null, o.toString());
                        //imd.setVisible(true);
                        JOptionPane.showMessageDialog(theList, "Double-clicked on: " + o.toString());
                        System.out.println("Double-clicked on: " + o.toString());
                    }
                }
            }
        }
    }
    
    if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {