GWT-flextable-添加焦点列表输入
我正在制作一个可编辑的flextable。单击某个单元格时,它会变成该特定单元格中的文本框。文本框包含单击的原始单元格的文本。由于“addFocustListener”函数已被弃用,我应该使用哪些函数将文本框中键入的新文本复制到flextable中 以下是我的代码:GWT-flextable-添加焦点列表输入,gwt,flextable,Gwt,Flextable,我正在制作一个可编辑的flextable。单击某个单元格时,它会变成该特定单元格中的文本框。文本框包含单击的原始单元格的文本。由于“addFocustListener”函数已被弃用,我应该使用哪些函数将文本框中键入的新文本复制到flextable中 以下是我的代码: package testproject3.client; import java.util.ArrayList; import com.google.gwt.core.client.GWT; import com.google.
package testproject3.client;
import java.util.ArrayList;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FocusListenerAdapter;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class ViewAndEditCompWidget
{
VerticalPanel vPanel=null;
FlexTable table =null;
public VerticalPanel getvPanel()
{
table = new FlexTable();
vPanel = new VerticalPanel();
table.setText(0, 0, " Name");
table.setText(0, 1, " Address aasdfasfasfdasfasfdasfasdfasfasdfasfsafasdfsadfsdfasfsdfasdfsafasdfasdfasdf");
table.setText(1, 0, " My Name");
table.setText(1, 1, " 123456789 asfasdfasfdddddddddddddddddddddddddddd");
makeTableEditable();
vPanel.add(table);
return vPanel;
}
public void makeTableEditable()
{
table.addClickHandler(new ClickHandler()
{
@SuppressWarnings("deprecation")
@Override
public void onClick(ClickEvent event)
{
final int cellIndex = table.getCellForEvent(event).getCellIndex();
final int rowIndex = table.getCellForEvent(event).getRowIndex();
//Cell cell = myTable.getCellForEvent(event);
//int receiverRowIndex = cell.getRowIndex();
//make sure that it is not the header row
if(rowIndex != 0)
{
//make a new Textbox
final TextBox textBox = new TextBox();
textBox.setText(table.getText(rowIndex, cellIndex));
table.setWidget(rowIndex, cellIndex, textBox);
/*********************************************
DeferredComman is deprecated
*********************************************/
DeferredCommand.addCommand(new Command()
{
@Override
public void execute()
{
textBox.setFocus(true);
textBox.selectAll();
}
}
);
/*********************************************
addFocusListener is also deprecated
*********************************************/
textBox.addFocusListener(new FocusListenerAdapter()
{
public void onLostFocus(Widget sender)
{
table.setText(rowIndex, cellIndex, textBox.getText());
}
}
);
//add a keyboard listener to the text box
//so that it reacts to enter and ESC key
textBox.addKeyPressHandler(new KeyPressHandler()
{
@Override
public void onKeyPress(KeyPressEvent event)
{
//if key pressed was ENTER, copy the text box's text into the table
if (event.getCharCode() == KeyCodes.KEY_ENTER)
{
table.setText(rowIndex, cellIndex, table.getText(rowIndex, cellIndex));
}
else if (event.getCharCode() == KeyCodes.KEY_ESCAPE)
{
table.setText(rowIndex, cellIndex, textBox.getText()+"");
}
}//onKeyPress
});//addKeyPressHandler
}//if
}
});
}
}
DeferredCommand和addFocustListener不推荐使用。在他们的地方可以使用什么
以下是我的新代码:
public class CellTableExample implements EntryPoint {
/**
* A simple data type that represents a contact.
*/
private static class Contact {
private final String address;
private final Date birthday;
private final String name;
public Contact(String name, Date birthday, String address) {
this.name = name;
this.birthday = birthday;
this.address = address;
}
}
/**
* The list of data to display.
*/
@SuppressWarnings("deprecation")
private static final List<Contact> CONTACTS = Arrays.asList(
new Contact("John", new Date(80, 4, 12), "123 Abc Avenue"),
new Contact("Joe", new Date(85, 2, 22), "22 Lance Ln fasfasdfasfdasdfasfasdfasfasdfasfasfasdfasdfasdf"),
new Contact("Tom", new Date(85, 3, 22), "33 Lance Lnasdfasfdasdfffffffffffffffffff"),
new Contact("Jack", new Date(85, 4, 22), "44 Lance Lnsddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"));
public void onModuleLoad() {
// Create a CellTable.
final CellTable<Contact> table = new CellTable<Contact>();
// Display 3 rows in one page
table.setPageSize(3);
// Add a text column to show the name.
TextColumn<Contact> nameColumn = new TextColumn<Contact>() {
@Override
public String getValue(Contact object) {
return object.name;
}
};
table.addColumn(nameColumn, "Name");
// Add a date column to show the birthday.
DateCell dateCell = new DateCell();
Column<Contact, Date> dateColumn = new Column<Contact, Date>(dateCell) {
@Override
public Date getValue(Contact object) {
return object.birthday;
}
};
table.addColumn(dateColumn, "Birthday");
// Add a text column to show the address.
TextColumn<Contact> addressColumn = new TextColumn<Contact>() {
@Override
public String getValue(Contact object) {
return object.address;
}
};
table.addColumn(addressColumn, "Address");
// Associate an async data provider to the table
// XXX: Use AsyncCallback in the method onRangeChanged
// to actaully get the data from the server side
AsyncDataProvider<Contact> provider = new AsyncDataProvider<Contact>() {
@Override
protected void onRangeChanged(HasData<Contact> display) {
int start = display.getVisibleRange().getStart();
int end = start + display.getVisibleRange().getLength();
end = end >= CONTACTS.size() ? CONTACTS.size() : end;
List<Contact> sub = CONTACTS.subList(start, end);
updateRowData(start, sub);
}
};
provider.addDataDisplay(table);
provider.updateRowCount(CONTACTS.size(), true);
SimplePager pager = new SimplePager();
pager.setDisplay(table);
VerticalPanel vp = new VerticalPanel();
vp.add(table);
vp.add(pager);
// Add it to the root panel.
RootPanel.get().add(vp);
}
}
公共类CellTableExample实现入口点{
/**
*表示联系人的简单数据类型。
*/
私有静态类联系人{
私有最终字符串地址;
私人最后日期生日;
私有最终字符串名;
公共联系人(字符串名称、日期、生日、字符串地址){
this.name=名称;
这个生日=生日;
this.address=地址;
}
}
/**
*要显示的数据列表。
*/
@抑制警告(“弃用”)
私有静态最终列表联系人=Arrays.asList(
新联系人(“约翰”,新日期(80,4,12),“Abc大道123号”),
新联系人(“Joe”,新日期(85,2,22),“22 Lance Ln FasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdFasdf”),
新联系人(“Tom”,新日期(85,3,22),“33 Lance Lnasdfasfdasdfffffffffffff”),
新联系人(“Jack”,新日期(85,4,22),“44 Lance Lnsdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd”);
moduleload()上的公共void{
//创建一个单元格表。
最终单元表=新单元表();
//在一页中显示3行
表2.setPageSize(3);
//添加一个文本列以显示名称。
TextColumn name column=新建TextColumn(){
@凌驾
公共字符串getValue(联系人对象){
返回object.name;
}
};
表.addColumn(名称栏,“名称”);
//添加日期列以显示生日。
DateCell DateCell=新的DateCell();
列dateColumn=新列(dateCell){
@凌驾
公共日期getValue(联系人对象){
返回object.birth;
}
};
表.addColumn(dateColumn,“生日”);
//添加一个文本列以显示地址。
TextColumn addressColumn=新的TextColumn(){
@凌驾
公共字符串getValue(联系人对象){
返回object.address;
}
};
表.addColumn(addressColumn,“地址”);
//将异步数据提供程序与表关联
//XXX:在onRangeChanged方法中使用AsyncCallback
//从服务器端实际获取数据
AsyncDataProvider provider=新的AsyncDataProvider(){
@凌驾
受保护的无效onRangeChanged(HasData显示){
int start=display.getVisibleRange().getStart();
int end=start+display.getVisibleRange().getLength();
end=end>=CONTACTS.size()?CONTACTS.size():end;
列表子列表=联系人。子列表(开始、结束);
updateRowData(开始,子节点);
}
};
provider.addDataDisplay(表);
provider.updateRowCount(CONTACTS.size(),true);
SimplePager pager=新SimplePager();
寻呼机设置显示(表格);
VerticalPanel vp=新的VerticalPanel();
副总裁添加(表);
副总裁添加(寻呼机);
//将其添加到根面板。
RootPanel.get().add(vp);
}
}
在GWT中不推荐使用侦听器,因为1.6版将不得不使用处理程序。你看到一个addFocusHandler了吗
从gwt站点-
添加事件处理程序以替换小部件、历史记录和各种其他类使用的旧事件侦听器
ps-再看看,我想这就是你想要达到的目标。谢谢你的建议。是否可以调整单元格表中EditTextCell的大小?如果是“调整大小”,您的意思是在浏览器上调整大小。。。然后是的。这是可能的。你所说的调整浏览器大小是什么意思?我已经包含了上面的代码,EditTextCell区域是固定的,有时某些单元格包含大量数据,当单击单元格时,EditTextCell不会显示所有文本。它适合列的大小。如果测试的大小超过网格的大小,则必须使用光标移动。当然,这是可以定制的。我没试过。