首页 文章

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

提问于
浏览
0

我在选项卡中创建了一个带有多个选项卡(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

    我发现我可以使用这个:

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

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

相关问题