Java 获取JScrollPane中包含的JList
我有一个内部有6个JScrollPane的大面板,每个JScrollPane都包含一个JList。 我正在尝试将MouseListener事件添加到面板上的每个JList中,如何访问它?为了更好地理解,以下是我的代码:Java 获取JScrollPane中包含的JList,java,swing,jscrollpane,jlist,mouselistener,Java,Swing,Jscrollpane,Jlist,Mouselistener,我有一个内部有6个JScrollPane的大面板,每个JScrollPane都包含一个JList。 我正在尝试将MouseListener事件添加到面板上的每个JList中,如何访问它?为了更好地理解,以下是我的代码: private void agregarDobleClick() { for (Component c : jPanel1.getComponents()) { c.addMouseListener(new MouseAdapter() {
private void agregarDobleClick() {
for (Component c : jPanel1.getComponents()) {
c.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent evt) {
JList list = (JList) evt.getSource();
if (evt.getClickCount() == 2) {
Rectangle r = list.getCellBounds(0, list.getLastVisibleIndex());
if (r != null && r.contains(evt.getPoint())) {
modCitaPOPUP modcita = new modCitaPOPUP((Cita) list.getSelectedValue());
modcita.setVisible(true);
}
}
}
});
}
}
当我运行它时,它会将mouseListener添加到JScrollPane,当我双击JList项时,不会发生任何事情,因为mouseListener事件不在那里。
谢谢。根据您的描述,它“看起来”像是将鼠标侦听器添加到JScrollPane
而不是JList
简单的解决办法是制作一个特制的MouseListener
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
并在创建时将其应用于每个JList
JList list = new JList();
list.addMouseListener(new ListMouseListener(list));
现在,如果您担心它们可能效率低下或占用大量内存(根据您的示例,您不是),您可以创建一个通用的MouseListener
,它使用事件源来确定是谁触发了它
public class ListMouseListener extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent evt) {
Object source = evt.getSource();
if (source instanceof JList) {
JList list = (JList)source;
}
}
}
然后创建一个实例并将其应用于JList
的所有实例
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
根据您的描述,“看起来”您正在将MouseListener
添加到JScrollPane
而不是JList
简单的解决办法是制作一个特制的MouseListener
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
并在创建时将其应用于每个JList
JList list = new JList();
list.addMouseListener(new ListMouseListener(list));
现在,如果您担心它们可能效率低下或占用大量内存(根据您的示例,您不是),您可以创建一个通用的MouseListener
,它使用事件源来确定是谁触发了它
public class ListMouseListener extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent evt) {
Object source = evt.getSource();
if (source instanceof JList) {
JList list = (JList)source;
}
}
}
然后创建一个实例并将其应用于JList
的所有实例
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
根据您的描述,“看起来”您正在将MouseListener
添加到JScrollPane
而不是JList
简单的解决办法是制作一个特制的MouseListener
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
并在创建时将其应用于每个JList
JList list = new JList();
list.addMouseListener(new ListMouseListener(list));
现在,如果您担心它们可能效率低下或占用大量内存(根据您的示例,您不是),您可以创建一个通用的MouseListener
,它使用事件源来确定是谁触发了它
public class ListMouseListener extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent evt) {
Object source = evt.getSource();
if (source instanceof JList) {
JList list = (JList)source;
}
}
}
然后创建一个实例并将其应用于JList
的所有实例
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
根据您的描述,“看起来”您正在将MouseListener
添加到JScrollPane
而不是JList
简单的解决办法是制作一个特制的MouseListener
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
并在创建时将其应用于每个JList
JList list = new JList();
list.addMouseListener(new ListMouseListener(list));
现在,如果您担心它们可能效率低下或占用大量内存(根据您的示例,您不是),您可以创建一个通用的MouseListener
,它使用事件源来确定是谁触发了它
public class ListMouseListener extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent evt) {
Object source = evt.getSource();
if (source instanceof JList) {
JList list = (JList)source;
}
}
}
然后创建一个实例并将其应用于JList
的所有实例
public class ListMouseListener extends MouseAdapter {
private JList list;
public ListMouseListener (JList list) {
this.list = list;
}
@Override
public void mouseClicked(MouseEvent evt) {
// Know you're self out with the list instance variable...
}
}
ListMouseListener singleInstance = new ListMouseListener();
//...
JList list = new JList();
list.addMouseListener(singleInstance);
创建鼠标侦听器时,将其添加到JList
s;那时它们就可以使用了,你不必费力地通过组件树找到它们。看起来就像你在用一把12 Ga的猎枪猎杀麻雀。当然,你会得到很多羽毛,但不会留下多少鸟。与其随意将鼠标指示器添加到JPanel上的组件中,从而错过JList,为什么不对JLists本身进行适当的引用,然后将鼠标指示器直接添加到JList引用中?@hovercraftfullofels“看起来就像你试图用一把12 Ga的猎枪猎杀麻雀”我知道我这个周末要做什么!好的,我试图“避免”使用for循环写更多的行,但我会这样做,谢谢。@Josemiguellelón您已经使用了for循环。您可以将所有JList
保存在某种数组中,或者列表
添加可能是4行代码,并将for循环
更改为访问它…在创建鼠标侦听器时将其添加到JList
中;那时它们就可以使用了,你不必费力地通过组件树找到它们。看起来就像你在用一把12 Ga的猎枪猎杀麻雀。当然,你会得到很多羽毛,但不会留下多少鸟。与其随意将鼠标指示器添加到JPanel上的组件中,从而错过JList,为什么不对JLists本身进行适当的引用,然后将鼠标指示器直接添加到JList引用中?@hovercraftfullofels“看起来就像你试图用一把12 Ga的猎枪猎杀麻雀”我知道我这个周末要做什么!好的,我试图“避免”使用for循环写更多的行,但我会这样做,谢谢。@Josemiguellelón您已经使用了for循环。您可以将所有JList
保存在某种数组中,或者列表
添加可能是4行代码,并将for循环
更改为访问它…在创建鼠标侦听器时将其添加到JList
中;那时它们就可以使用了,你不必费力地通过组件树找到它们。看起来就像你在用一把12 Ga的猎枪猎杀麻雀。当然,你会得到很多羽毛,但不会留下多少鸟。与其随意将鼠标指示器添加到JPanel上的组件中,从而错过JList,为什么不对JLists本身进行适当的引用,然后将鼠标指示器直接添加到JList引用中?@hovercraftfullofels“看起来就像你试图用一把12 Ga的猎枪猎杀麻雀”我知道我这个周末要做什么!好的,我试图“避免”使用for循环写更多的行,但我会这样做,谢谢。@Josemiguellelón您已经使用了for循环。你可以保留所有的钱