Swing/ProgressStringLayer のバックアップソース(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/ProgressStringLayer へ行く。
- 1 (2013-06-10 (月) 03:42:45)
- 2 (2015-02-19 (木) 18:40:20)
- 3 (2015-02-20 (金) 13:22:13)
- 4 (2015-03-18 (水) 18:49:46)
- 5 (2017-02-11 (土) 23:20:07)
- 6 (2017-04-07 (金) 13:51:51)
- 7 (2017-12-26 (火) 15:08:52)
- 8 (2019-05-17 (金) 17:06:43)
- 9 (2021-02-11 (木) 06:41:54)
- 10 (2022-08-20 (土) 22:15:25)
- 11 (2023-01-19 (木) 15:41:57)
- 12 (2023-01-23 (月) 06:33:11)
TITLE:JProgressBarの文字列をJLayerを使って表示する #navi(../) #tags(JProgressBar, JLayer) RIGHT:Posted by &author(aterai); at 2013-06-10 *JProgressBarの文字列をJLayerを使って表示する [#tc3d669f] 垂直``JProgressBar``の文字列を``JLayer``を使って横組で表示します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(https://lh4.googleusercontent.com/-ATDPf7XMEzg/UbTLqsulmsI/AAAAAAAABt0/_0ZOg11jmXk/s800/ProgressStringLayer.png) **サンプルコード [#x82529fa] #code(link){{ 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)); //label.setText(progress.getString()); 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; } }; progressBar.setOrientation(SwingConstants.VERTICAL); progressBar.setStringPainted(false); JComponent c = new JLayer<JProgressBar>(progressBar, layerUI); }} **解説 [#d822a63a] - 一番左 -- デフォルトの垂直``JProgressBar`` - 左から二番目 -- 文字列表示有りの垂直``JProgressBar`` - 右から二番目 -- 垂直``JProgressBar``に``BorderLayout``を設定して、``JLabel``を配置 -- [[JProgressBarの進捗文字列の字揃えを変更する>Swing/ProgressStringAlignment]] -- ``JLabel``の幅と任意の余白から、垂直``JProgressBar``の幅を決定するよう、``JProgressBar#getPreferredSize()``をオーバーライド - 一番右 -- ``JLayer``を使って、垂直``JProgressBar``上に文字列を描画 -- ``JLabel``の幅と任意の余白から、垂直``JProgressBar``の幅を決定するよう、``JProgressBar#getPreferredSize()``をオーバーライド **参考リンク [#n24d08a9] - [java - Is it possible to save text horizontal in vertical JProgressbar - Stack Overflow http://stackoverflow.com/questions/16934009/is-it-possible-to-save-text-horizontal-in-vertical-jprogressbar] - [[JProgressBarの進捗文字列の字揃えを変更する>Swing/ProgressStringAlignment]] **コメント [#aa1e41ab] #comment