Swing/MultiLineLabel のバックアップ(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/MultiLineLabel へ行く。
- 1 (2007-12-24 (月) 23:24:03)
- 2 (2008-01-25 (金) 16:26:34)
- 3 (2008-05-08 (木) 18:45:44)
- 4 (2008-10-31 (金) 10:42:47)
- 5 (2008-10-31 (金) 14:36:51)
- 6 (2008-11-07 (金) 14:22:27)
- 7 (2008-12-25 (木) 00:03:08)
- 8 (2008-12-25 (木) 01:46:20)
- 9 (2008-12-26 (金) 00:38:15)
- 10 (2009-11-02 (月) 12:56:20)
- 11 (2010-02-17 (水) 16:59:03)
- 12 (2010-04-06 (火) 02:47:20)
- 13 (2010-08-26 (木) 17:17:17)
- 14 (2011-03-26 (土) 23:11:45)
- 15 (2011-12-11 (日) 15:59:40)
- 16 (2013-02-20 (水) 15:42:19)
- 17 (2013-02-28 (木) 14:43:36)
- 18 (2013-05-03 (金) 23:47:38)
- 19 (2013-08-17 (土) 00:22:43)
- 20 (2013-08-31 (土) 01:39:12)
- 21 (2014-11-01 (土) 00:46:09)
- 22 (2014-11-22 (土) 03:59:58)
- 23 (2014-11-25 (火) 03:03:31)
- 24 (2014-12-14 (日) 14:40:07)
- 25 (2015-03-10 (火) 16:01:23)
- 26 (2015-03-31 (火) 21:08:18)
- 27 (2016-05-27 (金) 13:15:09)
- 28 (2016-05-27 (金) 15:47:16)
- 29 (2016-06-02 (木) 16:53:00)
- 30 (2016-09-06 (火) 13:43:51)
- 31 (2017-03-30 (木) 13:53:56)
- 32 (2017-03-31 (金) 16:14:00)
- 33 (2017-08-24 (木) 17:41:10)
- 34 (2017-11-02 (木) 15:34:40)
- 35 (2018-09-06 (木) 11:18:35)
- 36 (2018-10-30 (火) 16:36:49)
- 37 (2019-10-15 (火) 17:33:47)
- 38 (2021-05-20 (木) 07:50:33)
- 39 (2022-08-20 (土) 22:15:25)
TITLE:JTextPane、JLabelなどで複数行を表示
JLabel、JTextAreaなどで複数行を表示
Posted by terai at 2006-06-10
概要
JTextPane、JTextArea、JLabelを使った複数行のラベルをテストします。
- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
private final JTextPane label1 = new JTextPane();
private final JTextArea label2 = new JTextArea();
private final JLabel label3 = new JLabel();
public MainPanel() {
super(new GridLayout(3,1));
ImageIcon icon = new ImageIcon(getClass().getResource("wi0124-32.png"));
SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setLineSpacing(attr, -0.2f);
label1.setParagraphAttributes(attr, true);
label1.setText("JTextPane\nasdfasdf");
label2.setText("JTextArea\nasdfasdf");
label3.setText("<html>JLabel+html<br>asdfasdf");
label3.setIcon(icon);
add(setLeftIcon(label1, icon));
add(setLeftIcon(label2, icon));
add(label3);
setPreferredSize(new Dimension(200, 200));
}
private static Box setLeftIcon(JTextComponent label, ImageIcon icon) {
label.setForeground(UIManager.getColor("Label.foreground"));
//label.setBackground(UIManager.getColor("Label.background"));
label.setOpaque(false);
label.setEditable(false);
label.setFocusable(false);
label.setMaximumSize(label.getPreferredSize());
label.setMinimumSize(label.getPreferredSize());
JLabel l = new JLabel(icon);
l.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
Box box = Box.createHorizontalBox();
box.add(l);
box.add(Box.createHorizontalStrut(2));
box.add(label);
box.add(Box.createHorizontalGlue());
return box;
}
解説
- 上:JTextPane
- 文字色、背景色を変更し、編集不可、フォーカスの取得不可にしたJTextPaneを使用
- \nを使って改行し複数行を表示
- SimpleAttributeSetを使って、行間を詰めている
- 中:JTextArea
- 文字色、背景色を変更し、編集不可、フォーカスの取得不可にしたJTextAreaを使用
- \nを使って改行し複数行を表示
- 下:JLabel+html
- JLabelの文字列にhtmlタグを使用
- <br>タグを使って改行し複数行を表示
参考リンク
コメント
- JDK 6 で、htmlタグを使ったJLabelでの複数行表示がすこし変更されているみたいです(Windows環境)。行間が詰まって見易くなっているようで、わざわざJTextPane+SimpleAttributeSetで行間を調節する必要もなさそうです。 -- terai
- label.setBackground(UIManager.getColor("Label.background"));*1をlabel.setOpaque(false);に変更しました。 -- terai
- はじめまして。Java初心者なのですが、JLabelで英字フォントを指定するとギザギザで表示されるのですが、ギザギザをなくすにはどうしたらよいでしょうか?ネットで探すと「setRenderingHint」を使うとできると出てはくるのですが、JLabelを使った場合の例が出てこなくて。。。ご教授よろしくお願いします。 -- ばしばし?
- こんばんは。「Java SE 6完全攻略」第17回 文字に対するアンチエイリアス:ITproにいろんな環境での方法がまとめられています。自宅の環境(Windows XP + java1.6.0_03)では、以下のようにオプションを設定して起動するとアンチエイリアスが掛かるようです(XPの画面のプロパティ、デザイン、効果をClearTypeに変更してもなぜかうまくいかない…)。 -- terai
java -Dawt.useSystemAAFontSettings=on -cp ".\target\classes" example.MainPanel
- こんばんは。「Java SE 6完全攻略」第17回 文字に対するアンチエイリアス:ITproにいろんな環境での方法がまとめられています。自宅の環境(Windows XP + java1.6.0_03)では、以下のようにオプションを設定して起動するとアンチエイリアスが掛かるようです(XPの画面のプロパティ、デザイン、効果をClearTypeに変更してもなぜかうまくいかない…)。 -- terai
- ありがとうございます。なるほど、いろいろ書かれていますね!明日試してみます! -- ばしばし?
- こんにちは。当方の環境がJDK1.5であったので、非標準の「-Dswing.aatext=true」を設定するとアンチエイリアスがかかりました。けれども、標準ではどうするのかと言う疑問が。。。 -- ばしばし?
- ども。Sunに「1.5にも標準のオプション用意して」とお願いする…のはひとまず置いといて…。「Java Swing Hacks」本では、テキストにアンチエイリアスを適用するためだけのLook & Feel(Wrap Look And Feel - L2FProd.com)を使用する方法が紹介(HACK#52)されています。これを使えば、「-Dswing.aatext=true」無しで、1.5でもアンチエイリアスが掛かります。 -- terai
- もし、一部のJLabelをアンチエイリアスするだけでいいのなら、以下のようにJLabel#paintComponentメソッドをオーバーライドしてしまうのが手っ取り早いかもしれません。 -- terai
JLabel label = new JLabel("asdfasdfasdf") { @Override protected void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); super.paintComponent(g2d); } };
- お返事遅くなりましたm(__)m。試してみます!ありがとうございます! -- ばしばし?
- JLabelでhtmlを使用するとsetEnabled(false)でグレーアウトしてくれないです。どうしたものでしょう。 -- ApplePedlar?
- Bug ID: 4740519 HTML JLabel not greyed out on setEnabled(false)ですね。今のところ、Swing - JLabel with html tag can not be disabled or setForegroud?!みたいに
逃げるしかない?みたいです。する方法があります。 -- terai - コードが長くなってしまったので、別ページを作成しました。JEditorPaneを使用する方法も追加しています。Htmlを使ったJLabelとJEditorPaneの無効化 -- terai
- Bug ID: 4740519 HTML JLabel not greyed out on setEnabled(false)ですね。今のところ、Swing - JLabel with html tag can not be disabled or setForegroud?!みたいに