gpt4 book ai didi

java - JLabel 将纯文本包装为 JTextArea

转载 作者:行者123 更新时间:2023-11-29 05:43:38 25 4
gpt4 key购买 nike

我对 JLabel 和其中的纯文本换行有疑问。对于纯文本换行,我使用的是 LabelView,我对它给我的结果不是很满意。

我的目标是获得纯文本换行,例如 JTextArea。我试过 WrappedPlainView 但它只适用于 JTextComponent

所以我的问题是,也许你们知道/或有一些高级 JLabel View ?

注意:我不想在我的纯文本中添加 html。

标签 View :http://docs.oracle.com/javase/6/docs/api/javax/swing/text/LabelView.html

WrappedPlainView:http://docs.oracle.com/javase/6/docs/api/javax/swing/text/WrappedPlainView.html

试试这个例子,看看调整框架大小时单词是如何换行的:

import javax.swing.*;
import java.awt.*;
public class Example extends JFrame {
private static final String LONG_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
"Ut in enim velit. Nunc posuere purus ac odio dictum auctor. " +
"Vivamus nec sem mi. Curabitur sed iaculis nibh. Proin vel massa augue. " +
"Aenean laoreet, tellus ut vulputate mollis, justo eros ornare tortor, " +
"vitae venenatis turpis augue id purus. In quis pretium justo. " +
"Quisque interdum sem at augue ultrices molestie. " +
"Nulla consectetur magna nec est malesuada sed ultricies diam gravida. " +
"Curabitur luctus, nulla nec pulvinar fringilla, enim turpis luctus tellus, " +
"non auctor diam ligula quis lectus.";

public Example()
{
JTextArea textArea = new JTextArea(LONG_TEXT);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setOpaque(false);
textArea.setEditable(false);

add(new JScrollPane(textArea), BorderLayout.CENTER);
setMinimumSize(new Dimension(100, 100));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}

public static void main(String []args)
{
new Example();
}
}

看看这个例子,你会发现 JLabel 换行的问题:

import javax.swing.*;
import java.awt.*;
public class Example extends JFrame {
private static final String LONG_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
"Ut in enim velit. Nunc posuere purus ac odio dictum auctor. " +
"Vivamus nec sem mi. Curabitur sed iaculis nibh. Proin vel massa augue. " +
"Aenean laoreet, tellus ut vulputate mollis, justo eros ornare tortor, " +
"vitae venenatis turpis augue id purus. In quis pretium justo. " +
"Quisque interdum sem at augue ultrices molestie. " +
"Nulla consectetur magna nec est malesuada sed ultricies diam gravida. " +
"Curabitur luctus, nulla nec pulvinar fringilla, enim turpis luctus tellus, " +
"non auctor diam ligula quis lectus.";

public Example()
{
JLabel label = new JLabel(LONG_TEXT);
add(label, BorderLayout.CENTER);
setMinimumSize(new Dimension(100, 100));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}

public static void main(String []args)
{
new Example();
}
}

所以目标是让 JLabel 单词像在 JTextArea 中那样换行。

注意:在实际项目中,我使用的是 javax.swing.text.View`s,我使用的是纯文本的 LabelView。

最佳答案

So my question would be maybe you guys know/or have some advance JLabel views,

有两种方法,

  • 使用 JTextComponent

    1. 不可编辑,setEditable()
    2. 更改 setDisabledTextColor()
    3. (仅在需要时)为了透明度(默认情况下 JLabel),您可以更改不透明度

.

  • 将 JLabel 与 Html 一起使用(减少并实现了 up_to 版本 Html3.2)

  • post和SSCCE

编辑:

NOTE: in real project i am working with javax.swing.text.View`s and i am using LabelView for plain text.

JTextComponentsjavax.swing.text.Xxx 需要使用初始 PreferredSize,请参阅 public JTextArea(String text, int rows, int columns)

添加 1) 使用 JTextComponent

必须有关于

的决定
  • 如果包裹在 JScrollPane 中而没有或没有可见的 JScrollBar(覆盖 MouseScroll)

  • 或者简单地添加到容器中,我建议使用 BorderLayout 或 GridLayout,然后 JTextArea 也可以随容器调整大小(看起来一样)

  • 可滚动的 JComponents 将添加到 JScrollPane

.

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;

public class ExampleJTextArea extends JFrame {

private /*static*/ final String LONG_TEXT = "Lorem ipsum dolor sit amet, "
+ "consectetur adipiscing elit. Ut in enim velit. Nunc posuere "
+ "purus ac odio dictum auctor. Vivamus nec sem mi. Curabitur sed "
+ "iaculis nibh. Proin vel massa augue. Aenean laoreet, tellus ut "
+ "vulputate mollis, justo eros ornare tortor, vitae venenatis "
+ "turpis augue id purus. In quis pretium justo. Quisque interdum "
+ "sem at augue ultrices molestie. Nulla consectetur magna nec est "
+ "malesuada sed ultricies diam gravida. Curabitur luctus, nulla "
+ "nec pulvinar fringilla, enim turpis luctus tellus, non auctor "
+ "diam ligula quis lectus.";

public ExampleJTextArea() {
JTextArea textArea = new JTextArea(LONG_TEXT, 10, 25);
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
textArea.setOpaque(false);
textArea.setEditable(false);
textArea.setBorder(new EmptyBorder(10,10,2,2));
add(/*new JScrollPane(*/textArea/*), BorderLayout.CENTER*/);
//setMinimumSize(new Dimension(100, 100));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack();
setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ExampleJTextArea exampleJTextArea = new ExampleJTextArea();
}
});
}
}

.

.

添加 2) use JLabel with Html (reduced and implemented up_to version Html3.2), and another variations

关于java - JLabel 将纯文本包装为 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com