如何在其他帧中更改设置不确定的 j进度条



我有两个框架,框架A和框架B,在框架A中,我添加一个带有名称按钮A的按钮以显示框架B和进度条(setIndefininate(false((,在框架B中我添加一个带有名称按钮B的按钮,我想在单击按钮B时,帧A中的进度条。

在帧 A 中

frameB b;
public frameA() {
   initComponents();
   progressbar.setIndeterminate(false);
   b = new frameB();
}
public JProgressBar getProgressbar() {
   return progressbar;
}
private void buttonAActionPerformed(java.awt.event.ActionEvent evt) 
{                                       
    b.setVisible(true);
}

在帧 B 中我在事件按钮B单击中使用此代码

private void buttonBActionPerformed(java.awt.event.ActionEvent evt) { 
    frameA a= new frameA();
    a.getProgressbar().setIndeterminate(true);
}

但它不起作用

这个...

private void buttonBActionPerformed(java.awt.event.ActionEvent evt) { 
    frameA a= new frameA();
    a.getProgressbar().setIndeterminate(true);
}

行不通,您刚刚创建了另一个不可见的frameA实例。 它与当前打开的框架没有关系。

有很多方法可以实现这一点...

你可以...

frameA 的引用作为构造函数调用的一部分传递给frameB frameB 。 然后在actionPerformed方法中,只需使用此引用来更改进度条状态。

但这会在frameAframeB之间建立紧密的耦合,从而大大减少frameB的重用

你可以...

提供一种方法,通过该方法,相关方可以将ActionListener附加到frameB单击按钮时将触发该。

这假设了一个工作流程并将组件公开给外部源(通过ActionEvent#getSource(,这可能允许人们更改您的组件...

你可能应该...

触发PropertyChanged事件。

这可能是我想出的所有选项中最简单,最安全的。 以这种方式使用属性更改侦听器意味着您不需要公开JProgressBarJButton或在两个帧之间产生紧密链接。

属性更改支持内置于 Container 因此所有组件/控件都具有它。

例如,在构造PropertyChangeListener时,可以将附加到b

b = new frameB();
b.addPropertyChangeListener(new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if (evt.getPropertyName().equals("progressState")) {
            progressbar.setIndeterminate((Boolean)evt.getNewValue());
        }
    }
});

加上bFrameactionPerformed方法,你会简单地调用...

firePropertyChange("progressState", false, true);

当您想要设置不确定状态时(如果需要,可以交换boolean值以重置它(

相关内容

最新更新