gpt4 book ai didi

java - 如何更改其他框架中的 setInminated jProgressbar

转载 作者:行者123 更新时间:2023-12-02 07:08:29 25 4
gpt4 key购买 nike

我有一个两个框架,frameA和frameB,在frameA中我添加一个名为buttonA的按钮来显示frameB和进度条(setInminateate(false)),在frameB中我添加一个名为buttonB的按钮,我想当我单击时按钮B,frameA中的进​​度条.setindefinate(true)

在框架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 中,因此所有组件/控件都有它。

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

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 值来重置它)

关于java - 如何更改其他框架中的 setInminated jProgressbar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15826951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com