首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可扩展JTextArea

可扩展JTextArea
EN

Stack Overflow用户
提问于 2012-03-23 18:32:02
回答 2查看 859关注 0票数 0

我正在构建的应用程序的一部分要求我在某种不可编辑的组件中显示(变量)文本量。目前,这已经在JTextArea中实现了,但是JTextArea只有setRows()来设置组件的垂直大小。

我想要的是一个组件,它将扩展到所需的大小。这不会造成问题,因为嵌入这个东西的面板是可滚动的。它不需要在任何特定的时间出现,但它必须是可见的。(我不希望滚动条中的滚动条,我认为这是一种令人憎恶的东西。

哪个Swing组件最适合这些需求?

(注意:我在这里只问这个问题,因为整个#$^&* Oracle Java文档站点(包括所有Swing演示和教程)现在似乎都在下降)。

EN

回答 2

Stack Overflow用户

发布于 2012-03-23 20:26:56

恩..。如果你不想输入文本,你不需要JTextArea.仅仅为了显示一些文本,您可以简单地使用JLabel;JLabel支持html文本格式,所以您可以很容易地以如下方式使用它

代码语言:javascript
复制
...

JPanel aPanel=new JLanel(new FlowLayout());
JLabel aLabel=new JLabel();
aPanel.add(aLabel);


void showFormattedText(String html)
{
 aLabel.setText(html);
}

...

正如您可能猜到的,格式化文本可以是如下所示

代码语言:javascript
复制
<html>
Put some text<br>
...<br>

</html>

我希望你有了这个想法

..。

迷你解析器-未测试的

代码语言:javascript
复制
  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;

    }

..。

代码语言:javascript
复制
void test
{
       String text="Hello world \n Hello World once again \n ...and again ";

       System.out.println(this.getFormattedText(text));
}

..。这不是一个最终的解决办法,而是一个基本的概念。我希望这能帮上忙

祝好运

票数 0
EN

Stack Overflow用户

发布于 2012-03-23 21:35:56

我已经管理了一个工作原型,用于解决原始问题中的动态调整大小问题。当添加更多文本时,文本区域被调整到足够大以包含文本。显然,使用setEditable(false)停止文本编辑。希望它能给你一些想法。

recalculation

  • set

  • 设置的文本

  • 将列数更改为一个近似值--这里我使用了字符总数的平方根*任意因素。

  • 不是文本区域,但我们仍然需要固定高度。

  • 设置首选大小为一个低值--这将强制将首选高度降到最小高度--这是从内容的最小边框计算的。f 211

代码

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9844665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档