首页新闻找找看学习计划

java jfream中鼠标事件问题

0
悬赏园豆:5 [已解决问题] 解决于 2015-09-14 18:08

import java.awt.BorderLayout;


public class text2 extends JFrame {

private JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
text2 frame = new text2();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public text2() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);

JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.CENTER);

final JTextArea textArea = new JTextArea();
scrollPane.setViewportView(textArea);

JMenuBar menuBar = new JMenuBar();
scrollPane.setColumnHeaderView(menuBar);

JMenu menu = new JMenu("\u7F16\u8F91");
menuBar.add(menu);

JMenuItem mntmCopy = new JMenuItem("copy");
mntmCopy.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textArea.copy();
}
});

menu.add(mntmCopy);

JMenuItem mntmPaste = new JMenuItem("paste");
mntmPaste.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
textArea.paste();
}
});

menu.add(mntmPaste);

JMenuItem mntmCut = new JMenuItem("cut");
mntmCut.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {//mouseclick
textArea.cut();
}
});

menu.add(mntmCut);
}

}

这是改好的,原来的监听事件为mouseclick,可是就是不起作用,不知原因,请教帮助解答。

类似处的事件都是这样的:

JMenuItem mntmCut = new JMenuItem("cut");
mntmCut.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
text.cut();
}
});
menu.add(mntmCut);

结果触发不成功,但是想知道原因。。。。。。。。。。。
邗影的主页 邗影 | 初学一级 | 园豆:73
提问于:2015-09-06 16:38
< >
分享
最佳答案
0

我猜,MouseEvent是比ActionEvent更低级的事件,后者是在前者的基础上实现的,控件捕获低级鼠标事件(以检测高级ActionEvent?),处理之后就不再触发鼠标事件的监听器了。

我又猜,如果你监听一下鼠标按键按下的事件(mousepressed?方法名不记得,现在手机打字,不方便看javadoc),极有可能被调用到。

另外有一个信息,可能对你有用:mouseevent类或者它的某个父类,有一个方法是阻止事件继续被派发(到其他监听器),我想你的疑问,答案或许和这个方法有关,也就是这个方法被控件类内部实现调用过了。我现在手机打字,不方便查看apidoc,方法名不记得,不过你自己应该可以找到:-)

收获园豆:5
pf远 | 菜鸟二级 |园豆:209 | 2015-09-09 06:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册