多くのテキストが含まれる JLabel があります。JLabel に最大幅を持たせて、テキストをラップしてこの幅を超えないようにする方法はありますか?
ありがとう
多くのテキストが含まれる JLabel があります。JLabel に最大幅を持たせて、テキストをラップしてこの幅を超えないようにする方法はありますか?
ありがとう
いいえ。
ラベルに HTML を使用できますが、ブレーク タグをハード コードする必要があります。
より良い方法は、JTextArea を使用して折り返しをオンにすることです。テキストの背景、前景、フォントなどを変更して、ラベルのように見せることができます。
この回答は、少なくともJava 7の時点では古くなっていることに注意してください。
@darren の回答によると、文字列を<html>
と</html>
タグでラップするだけです。
myLabel.setText("<html>"+ myString +"</html>");
ブレーク タグをハードコーディングする必要はありません。コンポーネントのサイズが変更されると、テキストが折り返されます。
はい、2つの同様の方法があります(最初はcss style = "width:... px"を使用し、2番目はhtml WIDTH = .......を使用します:
1.1。
labelText = String.format("<html><div style=\"width:%dpx;\">%s</div></html>", width, text);
2.2。
labelText = String.format("<html><div WIDTH=%d>%s</div></html>", width, text);
または単に使用する
myLabel.setText("<html>"+ myString +"</html>");
代わりに段落タグを使用すると、改行タグをハードコーディングせずに HTML を使用できます。
JLabel biglabel = new JLabel("<html><p>A lot of text to be wrapped</p></html>");
SwingXプロジェクトの JXLabelはラッピングをサポートします
JXLabel label = new JXLabel(somelongtext);
label.setLineWrap(true);
ここに良いテクニックがあります。記事の最後までスクロールしてください。
JLabel labelBeingUsed = myLabel;
View view = (View) labelBeingUsed.getClientProperty(BasicHTML.propertyKey);
view.setSize(scrollPane1.getWidth(), 0.0f);
float w = view.getPreferredSpan(View.X_AXIS);
float h = view.getPreferredSpan(View.Y_AXIS);
labelBeingUsed.setSize((int) w, (int) h);
テキストをタグでラップする以外に<html>
、適切な高さを尊重し、幅を最大に設定するコンテナーにラベルを配置する必要もあります。たとえば、ラベルを の NORTH に配置できますBorderLayout
。
これを説明するための単純だが完全な作業プログラムを次に示します。フレームのサイズは自由に変更できます。ラベルは幅全体を占め、高さはそれに応じてテキストを折り返すように調整されます。ここで行っていることは、<html>
タグを使用し、ラベルをBorderLayout
.
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.Dimension;
public class LabelWrap {
public static JPanel createPanel() {
JLabel label = new JLabel();
label.setText("<html>"
+ "<h3>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h3>"
+ "<p>Duis a tincidunt urna. Phasellus tristique interdum mauris, "
+ "ut vestibulum purus suscipit eget. Aenean massa elit, accumsan "
+ "non faucibus vel, dictum placerat urna. In bibendum est sagittis "
+ "urna iaculis quis sagittis velit commodo. Cum sociis natoque "
+ "penatibus et magnis dis parturient montes, nascetur ridiculus "
+ "mus. Nam quis lacus mauris. Phasellus sem libero, convallis "
+ "mattis sagittis vel, auctor eget ipsum. Vivamus molestie semper "
+ "adipiscing. In ac neque quis elit suscipit pharetra. Nulla at "
+ "orci a tortor consequat consequat vitae sit amet elit. Praesent "
+ "commodo lacus a magna mattis vehicula. Curabitur a hendrerit "
+ "risus. Aliquam accumsan lorem quis orci lobortis malesuada.</p>"
+ "<p>Proin quis viverra ligula. Donec pulvinar, dui id facilisis "
+ "vulputate, purus justo laoreet augue, a feugiat sapien dolor ut "
+ "nisi. Sed semper augue ac felis ultrices a rutrum dui suscipit. "
+ "Praesent et mauris non tellus gravida mollis. In hac habitasse "
+ "platea dictumst. Vestibulum ante ipsum primis in faucibus orci "
+ "luctus et ultrices posuere cubilia Curae; Vestibulum mattis, "
+ "tortor sed scelerisque laoreet, tellus neque consectetur lacus, "
+ "eget ultrices arcu mi sit amet arcu. Nam gravida, nulla interdum "
+ "interdum gravida, elit velit malesuada arcu, nec aliquam lectus "
+ "velit ut turpis. Praesent pretium magna in nibh hendrerit et "
+ "elementum tellus viverra. Praesent eu ante diam. Proin risus "
+ "eros, dapibus at eleifend sit amet, blandit eget purus. "
+ "Pellentesque eu mollis orci. Sed venenatis diam a nisl tempor "
+ "congue.</p>"
+ "</html>");
JPanel panel = new JPanel(new BorderLayout());
panel.add(label, BorderLayout.NORTH);
panel.setPreferredSize(new Dimension(640, 480));
return panel;
}
/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(createPanel());
frame.pack();
frame.setVisible(true);
}
});
}
}
JLabel のみを使用したい場合は、このアプローチを試すことができます。
部分文字列メソッドを使用して、ラベルに表示する文字数を表示するだけです。
public void setLabel(String label){
String dispLabel=label.substring(0, numOfCharacter);
labelComponent.setText(dispLabel);
}