我正在寻找创建一个垂直增长的文本区域,在那里我仍然可以看到文本的第一行。
目前我正在尝试使用这个:
public class GrowableTextArea extends TextArea {
/**
*
*/
private static final long serialVersionUID = 1L;
int initialRowSize = 1;
int fixedColSize = 40;
int currentRowSize = initialRowSize;
float temp = 1.0f;
String inputValue;
public GrowableTextArea(String id) {
super(id);
setModel(new PropertyModel(this, inputValue));
setOutputMarkupId(true);
add(new GrowableBehavior("onkeyup"));
}
/***
* Set the rows here. So that every time component is rendered,
*
* rows value is updated.
**/
@Override
public void onComponentTag(ComponentTag tag) {
super.onComponentTag(tag);
tag.put("rows", currentRowSize);
tag.put("cols", fixedColSize);
}
/*** Getters and setters ***/
public int getCurrentRowSize() {
return currentRowSize;
}
public void setCurrentRowSize(int currentRowSize) {
this.currentRowSize = currentRowSize;
}
public String getInputValue() {
return inputValue;
}
public void setInputValue(String inputValue) {
this.inputValue = inputValue;
}
private class GrowableBehavior extends AjaxFormComponentUpdatingBehavior
{
/***
* Tell it to fire the onkeyup event every 1/2 sec.
**/
public GrowableBehavior(String event) {
super(event);
setThrottleDelay(Duration.milliseconds(500));
}
/***
* First the model is updated and then
*
* length is checked to see the
*
* whether rowcount should be incremented
**/
@Override
protected void onUpdate(AjaxRequestTarget target) {
Component comp = getComponent();
TextArea textarea = (TextArea) comp;
String value = (String) textarea.getConvertedInput();
if (value != null) {
int currentLength = value.length();
float f = (float) currentLength / fixedColSize;
if (f > temp) {
currentRowSize++;
temp = temp + 1;
target.add(comp);
}
}
}
}
public void setThrottleDelay(Duration milliseconds) {
// TODO Auto-generated method stub
}
}
我的输出只是一个普通的文本区域,类似于堆栈溢出文本区域。这里有什么问题?