首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >addPropertyChangeListener()从JTabbedPane上的JPanel到JTabbedPane

addPropertyChangeListener()从JTabbedPane上的JPanel到JTabbedPane
EN

Stack Overflow用户
提问于 2015-10-19 11:32:12
回答 1查看 384关注 0票数 0

我正在创建一个包含多个制表符(JTabbedPane)的程序,在选项卡中有一个JPanel,其中包含所有的conent。当我按start (JButton)时,我创建一个任务的新实例(一个扩展Swingworker的类),并且我希望将我的所有menuItems设置为enable(false)。这是在一个JFrame上。

但我无法从Jpanel上联系到JFrame

控制器类:

代码语言:javascript
复制
public class Controller {
    private Task task;

    public Controller() {
        newTask();
    }

    public void newTask(){
        task = new Task();
    }

    public Task getTask() {
        return task;
    }
}

帧类:

代码语言:javascript
复制
public class Frame extends JFrame implements PropertyChangeListener {

    private Controller controller;

    public Frame(String title, Controller controller) {
        super(title);
        this.controller = controller;
        controller.getTask().addPropertyChangeListener(this);
        JTabbedPane tabbedPane = new JTabbedPane();
        TabbedPane0 tabbedPane0 = new TabbedPane0(controller);
        JPanel jPanel = new JPanel();
        tabbedPane.add(tabbedPane0);
        tabbedPane.add(jPanel);
        add(tabbedPane);
        setSize(400, 500);
        setVisible(true);
        controller.getTask().TestPropertyChange();

    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if (evt.getPropertyName() == "changed") {
            System.out.println("Changed property, disabled all MenuItems that I added on this FRAME");
        }else if(evt.getPropertyName().equals("test")){
        System.out.println("Tested");
    }
    }
}

TabbedPane0类:

代码语言:javascript
复制
public class TabbedPane0 extends JPanel {

    private Controller controller;

    public TabbedPane0(Controller controller) {
        this.controller = controller;
        JButton  button = new JButton("Start");
        add(button);
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                controller.newTask();
                /*My frame needs to be added to the TaskPropertyChangeListeners but I can't acces it*/
                controller.getTask().addPropertyChangeListener(Frame);
            }
        });
    }
}

任务类:

代码语言:javascript
复制
public class Task extends SwingWorker<Void, Void> {

    @Override
    protected Void doInBackground() throws Exception {
        System.out.println("Task Is executed");
        return null;
    }

    public void TestPropertyChange(){
        firePropertyChange("test", null,null);
    }
}

跑课:

代码语言:javascript
复制
public class Run {

    public static void main(String[] args) {
        Controller controller = new Controller();
        new Frame("StackOverFlow Example TabbedPane", controller);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 13:09:08

我发现我可以用这个:

这将获得我的父JFrame,其中添加了JTabbedPane/Jpanel

代码语言:javascript
复制
controller.getTask().addPropertyChangeListener((JFrame) SwingUtilities.getWindowAncestor(FolderCreatorTab.this));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33213300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档