以下代码显示了两个具有相同多行html文本的标签。标签
然而,它们的文本定义方式不同:一个是普通字符串,另一个是
作为文本块。
标签按预期显示,即没有任何差异。
OptionPanes使用与标签完全相同的字符串,但文本块
未正确呈现。知道为什么吗?(java版本“16”)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TextBlocks extends JFrame {
public static final long serialVersionUID = 100L;
JButton b1, b2;
String txt1, txt2;
public TextBlocks() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 240);
txt1= "<html>"+
"<h3><font color=fuchsia>Caption</font></h3><font size=3>"+
"Lorem ipsum dolor sit amet, consectetur adipisici elit,<br>"+
"sed do eiusmod tempor incidunt ut labore et dolore<br><br>"+
"<h3>Topic 1</h3><font size=3>"+
"Lorem ipsum dolor sit amet, consectetur adipisici elit,<br>"+
"sed do eiusmod tempor incidunt ut labore et dolore magna<br>"+
"aliqua. Ut enim ad minim veniam, quis nostrud<br><br>"+
"<h3>Topic 2</h3><font size=3>"+
"Lorem ipsum dolor sit amet, consectetur adipisici elit,<br>"+
"sed do eiusmod tempor incidunt ut labore et dolore magna<br>"+
"aliqua. Ut enim ad minim veniam, quis nostrud exercita-<br>"+
"tion ullamco laboris nisi ut aliquid ex ea commodi</html>";
JLabel lb= new JLabel(txt1);
add(lb, BorderLayout.WEST);
txt2= """
<html><h3><font color=fuchsia>Caption</font></h3><font size=3>
Lorem ipsum dolor sit amet, consectetur adipisici elit,<br>
sed do eiusmod tempor incidunt ut labore et dolore<br><br>
<h3>Topic 1</h3><font size=3>
Lorem ipsum dolor sit amet, consectetur adipisici elit,<br>
sed do eiusmod tempor incidunt ut labore et dolore magna<br>
aliqua. Ut enim ad minim veniam, quis nostrud<br><br>
<h3>Topic 2</h3><font size=3>
Lorem ipsum dolor sit amet, consectetur adipisici elit,<br>
sed do eiusmod tempor incidunt ut labore et dolore magna<br>
aliqua. Ut enim ad minim veniam, quis nostrud exercita-<br>
tion ullamco laboris nisi ut aliquid ex ea commodi</html>
""";
lb= new JLabel(txt2);
add(lb, BorderLayout.CENTER);
JPanel p= new JPanel();
b1= new JButton("JOptionPane with text 1");
ActionListener listener= new ActListener();
b1.addActionListener(listener);
p.add(b1);
b2= new JButton("JOptionPane with text 2");
b2.addActionListener(listener);
p.add(b2);
add(p, BorderLayout.SOUTH);
pack();
setVisible(true);
}
static public void main(String args[]) {
EventQueue.invokeLater(TextBlocks::new);
}
class ActListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
String buf= evt.getSource()==b1 ? txt1 : txt2;
JOptionPane.showMessageDialog(TextBlocks.this, buf, "Demo",
JOptionPane.INFORMATION_MESSAGE);
}
}
}