我正在构建的部分应用程序要求我显示某种不可编辑组件中变量的文本数量。目前这已在JTextArea中实现,但JTextArea只有setRows()来设置组件的垂直大小。
我想要的是一个可以扩展到所需大小的组件。这不会造成问题,因为嵌入了这个东西的面板是可滚动的。它不必在任何特定时间出现,但必须是可见的。 (而且我不想滚动条中的滚动条,我认为它是令人厌恶的。
什么Swing组件最适合这些要求?
(注意:我在这里只是问这个问题,因为整个#$%^& * Oracle Java文档站点,包括所有Swing演示和教程现在似乎都已关闭了。)
答案 0 :(得分:0)
嗯......如果您不想输入文字,不需要 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));
}
......虽然这不是最终解决方案,但却是一个基本概念。我希望它有用
祝你好运答案 1 :(得分:0)
我已经管理了一个工作原型来解决原始问题中的动态调整大小问题。随着更多文本的添加,文本区域的大小将调整为足以包含文本。显然使用setEditable(false)来停止编辑文本。希望它会给你一些想法。
代码
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);