3
A
回答
4
- 另一種選擇是使用
BorderLayout
+JLabel
- ,或者如果您使用的是Java 1.7.0,您可以使用一個
JLayer
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.LayerUI;
public class ProgressBarLabelTest {
private static JProgressBar makeProgressBar1(BoundedRangeModel model) {
JProgressBar progressBar = new JProgressBar(model) {
private JLabel label = new JLabel("000/100", SwingConstants.CENTER);
private ChangeListener changeListener = null;
@Override public void updateUI() {
removeAll();
if(changeListener!=null) removeChangeListener(changeListener);
super.updateUI();
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
setLayout(new BorderLayout());
changeListener = new ChangeListener() {
@Override public void stateChanged(ChangeEvent e) {
int iv = (int)(100 * getPercentComplete());
label.setText(String.format("%03d/100", iv));
}
};
addChangeListener(changeListener);
add(label);
label.setBorder(BorderFactory.createEmptyBorder(0,4,0,4));
}
});
}
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
Insets i = label.getInsets();
d.width = label.getPreferredSize().width + i.left + i.right;
return d;
}
};
initProgressBar(progressBar);
return progressBar;
}
private static JComponent makeProgressBar2(BoundedRangeModel model) {
final JLabel label = new JLabel("000/100");
label.setBorder(BorderFactory.createEmptyBorder(4,4,4,4));
LayerUI<JProgressBar> layerUI = new LayerUI<JProgressBar>() {
private final JPanel rubberStamp = new JPanel();
@Override public void paint(Graphics g, JComponent c) {
super.paint(g, c);
Dimension d = label.getPreferredSize();
int x = (c.getWidth() - d.width)/2;
int y = (c.getHeight() - d.height)/2;
JLayer jlayer = (JLayer)c;
JProgressBar progress = (JProgressBar)jlayer.getView();
int iv = (int)(100 * progress.getPercentComplete());
label.setText(String.format("%03d/100", iv));
SwingUtilities.paintComponent(
g, label, rubberStamp, x, y, d.width, d.height);
}
};
JProgressBar progressBar = new JProgressBar(model) {
@Override public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
Insets i = label.getInsets();
d.width = label.getPreferredSize().width + i.left + i.right;
return d;
}
};
initProgressBar(progressBar);
return new JLayer<JProgressBar>(progressBar, layerUI);
}
public JComponent makeUI() {
final BoundedRangeModel m = new DefaultBoundedRangeModel();
JProgressBar progressBar0 = new JProgressBar(m);
initProgressBar(progressBar0);
progressBar0.setStringPainted(true);
JPanel p = new JPanel();
p.add(progressBar0);
p.add(makeProgressBar1(m));
p.add(makeProgressBar2(m));
p.add(new JButton(new AbstractAction("+10") {
private int i = 0;
@Override public void actionPerformed(ActionEvent e) {
m.setValue(i = (i>=100) ? 0 : i + 10);
}
}));
return p;
}
private static void initProgressBar(JProgressBar progressBar) {
progressBar.setOrientation(SwingConstants.VERTICAL);
progressBar.setStringPainted(false);
progressBar.setForeground(Color.GREEN);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() { createAndShowGUI(); }
});
}
public static void createAndShowGUI() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new ProgressBarLabelTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
+0
謝謝:-) .. ..............,你看我怎麼懶惰.... – mKorbel
3
4
這是一個true
-hack但如果對我的作品:
我在棧中查找,如果UI詢問方向,同時打印標籤,如果是這樣我返回另一個方向。
JProgressBar progress = new JProgressBar(){
@Override
public int getOrientation() {
for(StackTraceElement elem : new Throwable().getStackTrace()) {
if(elem.getMethodName().equals("paintText") || (elem.getMethodName().equals("paintString"))) {
return JProgressBar.HORIZONTAL;
}
}
return JProgressBar.VERTICAL;
}
};
相關問題
- 1. Flexbox的 - 水平取向垂直文本
- 2. 確定垂直或水平方向是否縮放
- 3. AvalonDoc 2垂直和水平方向
- 4. ScrollPanel垂直和水平方向
- 5. 水平導航條垂直向上
- 6. 是否可以將輸入字段文本插入閃爍指示器的方向從垂直變爲水平?
- 7. 如何在文本的水平和垂直方向居中文本?
- 8. UIPinchGestureRecognizer分別在水平和垂直方向上的比例尺
- 9. 垂直和水平居中文本
- 10. 解析文本垂直到水平
- 11. CSS:水平和垂直居中文本?
- 12. CSS:垂直和水平對齊文本?
- 13. JList - 使用垂直滾動條而不是水平垂直摺疊方向?
- 14. 是否可以在RadGrid中垂直而不是水平地顯示數據?
- 15. 將文本按鈕與文本(垂直和水平方向)對齊
- 16. jQuery Masonry可以垂直取向而不是水平取向div嗎?
- 17. 計算垂直和水平直方圖
- 18. Android的 - 垂直方向的作品,水平方向空白
- 19. Smartface IOS垂直方向工作,水平方向空白
- 20. css垂直方向文本
- 21. 垂直到水平?
- 22. 水平或垂直
- 23. 垂直或水平
- 24. 垂直和水平對齊的文本以及UIImage在UITextView內
- 25. CSS圖片懸停工作水平而不是垂直方向
- 26. 如何垂直,而不是水平方向
- 27. 是否可以爲html電子郵件創建垂直文本方向?
- 28. 防止輸入時文本的水平擴展。文本可以垂直擴展
- 29. 我想在div上垂直和水平居中文本
- 30. 垂直和水平遞歸在樹上
我不要現在它可能或不可以,但你可以創建你自己的揮杆組件使用標籤或引擎蓋下的按鈕。 –