如何从另一个函数向下钻取到JScrollPane中的JList

时间:2017-06-07 02:24:57

标签: java swing jlist windowbuilder

我正在创建一个像这样的JList:

JScrollPane scrollPane = new JScrollPane();
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.insets = new Insets(0, 0, 5, 5);
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 0;
gbc_scrollPane.gridy = 1;
contentPanel.add(scrollPane, gbc_scrollPane);
{
    JList listAvail = new JList();
    listAvail.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));    
    scrollPane.setViewportView(listAvail);
}

并且我在点击按钮时尝试访问它:

JButton btnAdd = new JButton("Add ->");
btnAdd.addMouseListener(new MouseAdapter()
{
    @Override
    public void mouseClicked(MouseEvent arg0)
    {
        if (!listAvail.isSelectionEmpty())
        {
            int[] selects = listAvail.getSelectedIndices();
            for (int i = selects.length - 1; i >= 0; i--)
            {
                appliedM.add(0, availM.getElementAt(selects[i]));
                appliedFeatures.add(0, availFeatures.get(selects[i]));
                availFeatures.remove(availFeatures.get(selects[i]));
                availM.remove(selects[i]);
            }
        }
    }
});

当然,我收到一条错误,说“listAvail无法解析”,因为它超出了按钮的范围。是否有getter方法或深入到特定组件的方法?我正在考虑以下几点:

contentPanel.scrollPane.listAvail

必须有一些我缺少的东西,但我在文档中没有看到过这样的东西。

编辑:我特别要求深入研究摆动组件。这不是通用的变量范围问题,也不是引用问题的精确副本。在编辑时,这个问题尚未得到解答。

1 个答案:

答案 0 :(得分:2)

你的问题归结为 - 当一个对象引用被分配给一个非常本地化的变量时,如何访问该对象引用,这里的对象是JList,它被分配给的变量是listAvail,变量埋在自己的花括号中(为什么?)在方法或构造函数中。

解决方案 - 获取本地范围的变量声明 out ,并使其成为该类的实例字段。如,

public class MyClass {
    private JList listAvail = new JList(); // should be generic btw

另一个问题是:

btnAdd.addMouseListener(new MouseAdapter() {....

不要将MouseListener与JButton一起使用,其中ActionListener更合适。如果您希望在禁用按钮本身时禁用按钮的操作,则会产生分支。