我正在构建的应用程序的一部分要求我在某种不可编辑的组件中显示(变量)文本量。目前,这已经在JTextArea中实现了,但是JTextArea只有setRows()来设置组件的垂直大小。
我想要的是一个组件,它将扩展到所需的大小。这不会造成问题,因为嵌入这个东西的面板是可滚动的。它不需要在任何特定的时间出现,但它必须是可见的。(我不希望滚动条中的滚动条,我认为这是一种令人憎恶的东西。
哪个Swing组件最适合这些需求?
(注意:我在这里只问这个问题,因为整个#$^&* Oracle Java文档站点(包括所有Swing演示和教程)现在似乎都在下降)。
发布于 2012-03-23 20:26:56
恩..。如果你不想输入文本,你不需要JTextArea.仅仅为了显示一些文本,您可以简单地使用JLabel;JLabel支持html文本格式,所以您可以很容易地以如下方式使用它
...
JPanel aPanel=new JLanel(new FlowLayout());
JLabel aLabel=new JLabel();
aPanel.add(aLabel);
void showFormattedText(String html)
{
aLabel.setText(html);
}
...正如您可能猜到的,格式化文本可以是如下所示
<html>
Put some text<br>
...<br>
</html>我希望你有了这个想法
..。
迷你解析器-未测试的
String getFormattedText(String text)
{
char commonBR='\n';
String htmlBR="<br>";
char check;
String result="";
for(int i=0; i<text.length(); i++)
{
check=text.charAt(i);
if(check==commonBR)
{
result+=htmlBR;
continue;
}
result+=check;
}
return result;
}..。
void test
{
String text="Hello world \n Hello World once again \n ...and again ";
System.out.println(this.getFormattedText(text));
}..。这不是一个最终的解决办法,而是一个基本的概念。我希望这能帮上忙
祝好运
发布于 2012-03-23 21:35:56
我已经管理了一个工作原型,用于解决原始问题中的动态调整大小问题。当添加更多文本时,文本区域被调整到足够大以包含文本。显然,使用setEditable(false)停止文本编辑。希望它能给你一些想法。
recalculation
f 211代码
JFrame frame = new JFrame();
GroupLayout gLayout = new GroupLayout(frame.getContentPane());
frame.getContentPane().setLayout(gLayout);
final JTextArea area = new JTextArea();
area.setEditable(false);
area.setLineWrap(true);
area.setWrapStyleWord(true);
JButton button = new JButton("Add more");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
area.setText(area.getText()
+ "apple banana carrot dingo eagle fox gibbon ");
// set approx number of cols
int chars = area.getText().length();
int cols = (int) Math.round(Math.sqrt(chars) * 1.3);
area.setColumns(cols);
// force recalculation
area.setPreferredSize(new Dimension(25, 25));
// downsize
area.setPreferredSize(new Dimension(
area.getPreferredSize().width,
area.getMinimumSize().height));
}
});
ParallelGroup hGroup = gLayout
.createParallelGroup()
.addComponent(button)
.addComponent(area, GroupLayout.PREFERRED_SIZE,
GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE);
gLayout.setHorizontalGroup(hGroup);
SequentialGroup vGroup = gLayout
.createSequentialGroup()
.addComponent(button)
.addComponent(area, GroupLayout.PREFERRED_SIZE,
GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE);
gLayout.setVerticalGroup(vGroup);
frame.setSize(600, 500);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.invalidate();
frame.validate();
frame.setVisible(true);https://stackoverflow.com/questions/9844665
复制相似问题