这种鼠标的监听怎么写

lqsmn613 2009-09-28 08:27:28


JTextArea[] textArea_day = new JTextArea[42];我定义的一个数组,后面会绘制成6X7的网格布局模式,而我需要在每一个格子里面监听其鼠标事件。
后面我用了个for (int i = 0; i < 42; i++) { }的循环,在这里面,textArea_day[i]就是指的某一个格子,但是在监听中,textArea_day[i]这个是无法使用,因为i是传不进来的,我想的是在外部写个监听,实现MouseListener的5个方法,准备利用其中的mouseEntered,mouseExited的方法判断其鼠标是否进入,然后只要在for循环中调用textArea_day[i].addMouseListener(MouseListener的名字);就可以了。但是mouseEntered,mouseExited这两个方法不怎么好判断。
本来我想是否可以利用各布尔值来判断,为true就就是进入了,false就是离开了,但是好像判断不到哦。
求助!!!
...全文
74 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lqsmn613 2009-09-28
  • 打赏
  • 举报
回复
不是的。我定义的这个JTextArea[] textArea_day = new JTextArea[42];然后后面是用一个for循环弄出的了一个6X7的网格布局嘛?这是一
二、我在设置这个布局的时候就定义了textArea_day[i]的setEditable(false)方法,使textArea_day[i]处于不能输入状态嘛,本来textArea_day是个文本区是可以输入打字的啊,调用了这个方法后,就关闭了它的输入打字的功能啊。
三、我不是在for循环中的设置了每个textArea_day[i].addMouseListener()的监听,需要在这个监听里面的mouseClicked()方法,监听鼠标的双击事件啊,就是if (e.getClickCount() == 2) {想在在这里面调用textArea_day[i]的setEditable(true)方法}。实现的是双击的时候,textArea_day[i]就变成可以进行输入打字的了。

这样说明白不明白。
daisycool 2009-09-28
  • 打赏
  • 举报
回复
恕我鲁钝,还是没怎么明白。什么叫“把它通过监听事件中调用这个方法设置为可以编辑,外面定义的不可编辑”?如果你想得到特定的TextArea,你可以在建立的时候给它一个特殊的名字,比如说jta_1, jta_3, jta_5可以编辑,jta_2, jta_4不可以
lqsmn613 2009-09-28
  • 打赏
  • 举报
回复
我要的很简单,我上面的6X7的布局是用一个JTextArea[]的数组弄出来的嘛,在for里面的textArea_day[i]添加的监听可以修改textArea_day[i]的setEditable(false)方法,把它通过监听事件中调用这个方法设置为可以编辑,外面定义的不可编辑。我要的就是这个效果。
可能上面说的有点乱,但是我根本的目的就是这个。有办法吗?
daisycool 2009-09-28
  • 打赏
  • 举报
回复
跟位置没关系
daisycool 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lqsmn613 的回复:]
daisycool兄的意思,是不是就是让我不要用数组,而是一个个放进去,设置好每个放置的位置?
[/Quote]

误会了。我只不过是用循环来生成6x7的布局而已。我不太清楚你是哪出问题了,是mouseEntered时获得目标组件还是别的什么。你运行一下我的程序,看看是不是你想要的效果
lqsmn613 2009-09-28
  • 打赏
  • 举报
回复
daisycool兄的意思,是不是就是让我不要用数组,而是一个个放进去,设置好每个放置的位置?
shine333 2009-09-28
  • 打赏
  • 举报
回复
如果想拿到textarea[i]而不关心i,(JTextArea) e.getSource(); 应该就是你要的。
如果关心数组下标,那么可以自己写一个类
public class MyTextArea extends JTextArea {
private int index; // with getter & setter
....
}

然后初始化的时候,把for的i设定到里面去,触发事件的时候,用((MyTextArea) e.getSource()).getIndex()
daisycool 2009-09-28
  • 打赏
  • 举报
回复
不太了解你的意图。我写了个小程序,试试看是不是你想要的


import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class MatrixListener extends JPanel{

public MatrixListener() {
this.setLayout(null);
this.setPreferredSize(new Dimension(800, 600));

int x = 30, y = 30;

for(int i = 0; i < 42; i ++) {
if(i % 7 == 0 && i != 0) {
x = 30;
y += 80;
}
JTextArea jta = new JTextArea("(" + x + "," + y + ")");
jta.setName("textarea_ " + i);
jta.setBounds(x, y, 80, 20);
jta.setBorder(BorderFactory.createBevelBorder(1));
jta.addMouseListener(new matrix_mouseAdapter(this));
this.add(jta);

x += 100;
}
}

public void jta_mouseEntered(MouseEvent e) {
JTextArea jta = (JTextArea)e.getSource();
System.out.println(jta.getName());
jta.grabFocus();
jta.setSelectionStart(0);
jta.setSelectionEnd(jta.getText().length());
}

public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(800, 600));
frame.setBounds(50, 50, 800, 600);
frame.add(new MatrixListener());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

class matrix_mouseAdapter extends MouseAdapter {
MatrixListener adaptee;

public matrix_mouseAdapter(MatrixListener adaptee) {
this.adaptee = adaptee;
}

public void mouseEntered(MouseEvent e) {
adaptee.jta_mouseEntered(e);
}
}
lqsmn613 2009-09-28
  • 打赏
  • 举报
回复
那有没有知道,这种情况下,怎么去的,某个textArea_day[i]的格子的位置,然后用取得的鼠标坐标来判断啊。
lqsmn613 2009-09-28
  • 打赏
  • 举报
回复
哎。。。来高人指点下啊。
浴火涅磐 2009-09-28
  • 打赏
  • 举报
回复
鼠标监听事件可以监听坐标,和左右键,别的就不太清楚了
liangwansheng 2009-09-28
  • 打赏
  • 举报
回复
不太清楚,顶一下吧。
lqsmn613 2009-09-28
  • 打赏
  • 举报
回复
daisycool兄上面的办法貌似已经解决的这个问题,很好。我研究下。
呵呵,太感谢了,我先采纳了。
daisycool 2009-09-28
  • 打赏
  • 举报
回复
其实这个问题已经解决了,不同的是你想要的是mouseClicked,我用的是mouseEntered;你想改变setEditable状态,我是选择里面的字符。看这个程序吧


import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class MatrixListener extends JPanel{

public MatrixListener() {
this.setLayout(null);
this.setPreferredSize(new Dimension(800, 600));

int x = 30, y = 30;

for(int i = 0; i < 42; i ++) {
if(i % 7 == 0 && i != 0) {
x = 30;
y += 80;
}
JTextArea jta = new JTextArea("(" + (i%7) + "," + i + ")");
jta.setBounds(x, y, 80, 20);
jta.setEditable(false);
jta.setEnabled(false);
jta.setBorder(BorderFactory.createBevelBorder(1));
jta.addMouseListener(new matrix_mouseAdapter(this));
this.add(jta);

x += 100;
}
}

public void jta_mouseClicked(MouseEvent e) {
JTextArea jta = (JTextArea)e.getSource();

if(e.getClickCount() == 2) {
jta.setEditable(true);
jta.setEnabled(true);
jta.grabFocus();
jta.setSelectionStart(0);
jta.setSelectionEnd(jta.getText().length());
}
}

public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(800, 600));
frame.setBounds(50, 50, 800, 600);
frame.add(new MatrixListener());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

class matrix_mouseAdapter extends MouseAdapter {
MatrixListener adaptee;

public matrix_mouseAdapter(MatrixListener adaptee) {
this.adaptee = adaptee;
}

public void mouseClicked(MouseEvent e) {
adaptee.jta_mouseClicked(e);
}
}


50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧