簡體   English   中英

如何將ActionListener添加到動態創建的JButton中?

[英]How add ActionListener to dynamically created JButton?

我想動態創建一個帶有文本字段和兩個按鈕的JFrame 問題是JTextFieldJButtonActionListenertreePanel.addObject(txt.getText()); )內部不可見。 如何解決這個問題?

JButton addButton = new JButton("Add");
        addButton.setActionCommand(ADD_COMMAND);
        addButton.addActionListener(new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent event) 
            {
                JFrame f = new JFrame("Add new group/subgroup");
                JPanel p = new JPanel(new MigLayout());
                p.add(new JLabel("Group/subgroup name: "));
                JTextField txt = new JTextField(10);
                JButton ok = new JButton("Ok");
                JButton cancel = new JButton("Cancel");
                p.add(txt,"wrap");
                p.add(ok); 
                p.add(cancel);
                f.add(p);

                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);                    
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
                ok.addActionListener(new ActionListener() 
                {
                    @Override
                    public void actionPerformed(ActionEvent event)
                    {
                        treePanel.addObject(txt.getText()); 
                    }
                });
                cancel.addActionListener(new ActionListener() 
                {
                    @Override
                    public void actionPerformed(ActionEvent event)
                    {
                        f.dispose();    
                    }
                });
            }
        });

匿名類是一個內部類 ,嚴格規則適用於內部類 (JLS 8.1.3)

必須將任何未在內部類中聲明的局部變量,形式化方法參數或異常處理程序參數聲明為final 必須在內部類主體之前明確分配在內部類中使用但未聲明的任何局部變量。

因此,根據您的情況,您需要將txt更改為上述規則的最終版本。

final JTextField txt = new JTextField(10);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM