java - Java JScrollPane 的事件处理程序

标签 java swing

我已经有一个基于 JList 的自定义控件,如下所示

public class MyClass extends JList<String> {

   private DefaultListModel<String> items = new DefaultListModel<String>();

   public MyClass() {
      setModel(items);
   }

   public String getAAAA() { //code here.. }
   public int getBBB() { //code here... }
}

但我希望 Jlist 有滚动条,因此我将自定义控件的父类(super class)更改为 JScrollPane 并将 JList 添加到其中。 像这样的代码

public class MyClass extends JScrollPanel {

  private JList<String> list = new JList<String>();
  private DefaultListModel<String> items = new DefaultListModel<String>();

  public MyClass() { 
    list.setModel(items);
    this.setViewportView(list);
  }

  public String getAAAA() { //code here.. }
  public int getBBB() { //code here... }
}

好吧,如果 MyClass 扩展了 JList,在 JFrame 中我可以将MouseListener 添加到 MyClass 对象,在 mouseClicked 中我比较 MouseEvent getSource 是 MyClass 的实例并调用 MyClass 的这些方法。

@Override    
public void mouseClicked(MouseEvent arg0)
{
    Object source = arg0.getSource();
    if (source instanceof MyClass)
    {
        String a = ((MyClass) source).getAAAA();
        int b = ((MyClass) source).getBBB();
    }
 }

但是如果 MyClass 扩展了 JScrollPane,我将 MouseListener 添加到 MyClass 对象,并且像上面一样,在 mouseClicked 中我比较 MyClass 的 MouseEvent getSource 实例并调用这些方法(getAAA()、getBBB()...),但它不起作用?

最佳答案

您可能不想扩展 JScrollPane。 您可以将任何组件添加到 JScrollPane 以实现滚动条。 JList是一个组件,所以可以直接添加。您不需要做太多事情。

参见: http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

关于java - Java JScrollPane 的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29262995/

相关文章:

java - 如何继承带注解的 Hibernate 过滤器?

java - 使用数据库进行 Intent 传递的问题

java - 在保存之前比较 Java 中的两个 JPasswordField?

java - 我可以在 init 之外的代码中添加文本字段吗?

java - 方法execute返回的结果集数量

java - 正则表达式匹配JAVA中的特定日期格式

java - 如何在 webapp 中寻找内存泄漏?

java - Java 中窗口框架关闭时不执行任何操作

java - 谢尔宾斯基三角

java - JComboBox getSelectedIndex 不工作两次?