从JTabbedPane上的JPanel向JFrame添加addPropertyChangeListener()

时间:2015-10-19 11:32:13

标签: java swing jpanel propertychangelistener

我正在创建一个带有多个标签的程序(JTabbedPane),标签中有一个JPanel,我的所有内容都打开了。当我按下start(JButton)时,我创建了一个新的Task实例(一个扩展Swingworker的类),我想将所有的menuItem设置为启用(false)。这是在JFrame上。

但我无法从Jpanel

到达JFrame

控制器类:

public class Controller {
    private Task task;

    public Controller() {
        newTask();
    }

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

    public Task getTask() {
        return task;
    }
}

框架类:

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类:

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);
            }
        });
    }
}

任务类:

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);
    }
}

运行课程:

public class Run {

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

1 个答案:

答案 0 :(得分:0)

我发现我可以使用它:

这将我的父JFrame添加到我的JTabbedPane / Jpanel

controller.getTask().addPropertyChangeListener((JFrame) SwingUtilities.getWindowAncestor(FolderCreatorTab.this));