![](/img/trans.png)
[英]JProgressBar does not update inside actionPerformed - Java Swing
[英]Java swing opaque JProgressBar inside JProgressBar
我正在嘗試將2個JProgressBars組合在一起,以便可以表示有關單個事件的統計信息。
我的問題是,如何將兩個進度條進行組合或疊加以使其可行?
我想出的一種解決方案是將兩個進度條放到一個JPanel中:
但這不是理想的解決方案。
相反,我想做的是使頂部進度欄不透明,然后將其重疊。 我相信使用組件可以將第二個JProgressBar .add()
到第一個。 但是,當我添加它時,我只能看到頂部的欄。 即使我將其設置為opaque
它仍然不會同時顯示它們兩者。
bar1.setOpaque(false);
bar1.setBorder(null);
bar2.add(bar1);
看來這應該很容易,所以我必須缺少一些關鍵的代碼行。
它“取決於”您要實現的目標,例如,一些GridBagLayout
魔術...
(我知道,我在Mac上運行,對它的評論越少越好;)
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weighty = 1;
gbc.gridx = 0;
gbc.gridy = 0;
JProgressBar pb1 = new JProgressBar();
pb1.setValue(50);
JProgressBar pb2 = new JProgressBar();
pb2.setValue(25);
add(pb1, gbc);
gbc.insets = new Insets(4, 4, 0, 0);
add(pb2, gbc, 0);
}
}
您可以查看從JProgressBar
刪除邊框並在包含面板周圍實現單個邊框,或者,如果其他所有方法都失敗,則可以使用自定義繪畫簡單地制作自己的邊框
您可以通過重寫JProgressBar.paintComponent(Graphics g)
來模擬第二個進度條。
在以下過度簡化的示例中,它繪制了一條線,其長度表示第二個“ bar”的值:
class BasicDoubleProgressbar extends JProgressBar{
private int secondaryBarValue;
void setSecondValue(int value){
secondaryBarValue = value;
}
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.CYAN);
g2.setStroke( new BasicStroke(5));
g2.drawLine(0, 10, secondaryBarValue,10);
}
}
測試一下:
public static void main(String[] args) {
BasicDoubleProgressbar pBar = new BasicDoubleProgressbar();
pBar.setMinimum(0); pBar.setMaximum(100);
pBar.setValue(0);
pBar.setForeground(Color.blue);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(pBar);
f.pack();
Timer timer = new Timer(100, new ActionListener() {
int counter = 1;
@Override
public void actionPerformed(ActionEvent ae) {
pBar.setValue(++counter);
pBar.setSecondValue(counter/2);
if (counter > 100) {
counter = 0;
}
}
});
timer.start();
f.setVisible(true);
}
(從此處復制粘貼完整的代碼並運行)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.