可以使用Vaadin表,解決了原來的問題,或多或少是這樣。訣竅是創建一個Vaadin容器並將其作爲數據放入其中。在文本方面,在VerticalLayout中包裝一個標籤,然後添加一個點擊監聽器。這樣可以顯示XHTML文本的「段落」,檢測相對位置的點擊,並且仍然能夠處理大量的段落。
您可能需要修改styles.css以允許在表格行中包裝文本,這樣會得到不整齊的行。
package com.soletta.clickytable;
import com.vaadin.Application;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.terminal.Sizeable;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.Window.CloseEvent;
import com.vaadin.ui.Window.CloseListener;
public class ClickytableApplication extends Application {
@Override
public void init() {
Window mainWindow = new Window("Clickytable 2 Application");
setMainWindow(mainWindow);
mainWindow.addListener(new CloseListener(){
public void windowClose(CloseEvent e) {
WebApplicationContext context = (WebApplicationContext) getContext();
context.getHttpSession().invalidate();
close();
}});
IndexedContainer container = new IndexedContainer();
container.addContainerProperty("text", VerticalLayout.class, new VerticalLayout());
container.addContainerProperty("edit", Button.class, new Button("Edit"));
for (int i = 0; i < 10; i++) {
final int index = i;
Object item = container.addItem();
Label lbl = new Label("Text Content " + i);
VerticalLayout vl = new VerticalLayout();
vl.setWidth(100, Sizeable.UNITS_PERCENTAGE);
vl.addComponent(lbl);
vl.addListener(new LayoutClickListener() {
public void layoutClick(LayoutClickEvent event) {
System.out.println(String.format("Clicked on text %,d at client(%,d,%,d), relative(%,d %,d)\n", index, event.getClientX(), event.getClientY(), event.getRelativeX(), event.getRelativeY()));
}
});
container.getItem(item).getItemProperty("text").setValue(vl);
container.getItem(item).getItemProperty("edit").setValue(new Button("Button " + i));
}
Table table = new Table("ClickyTable 2", container);
table.setColumnExpandRatio("text", 1);
table.setColumnExpandRatio("edit", 0);
table.setSizeFull();
VerticalLayout fl = new VerticalLayout();
fl.setSizeFull();
fl.addComponent(table);
mainWindow.setContent(fl);
}
}
有了一些風格的變化,結果會是這個樣子:
ClickTable Screen Shot http://www.soletta.com/images/ClickyTable.PNG
「你會選擇什麼Web框架」幾乎可以保證這個問題會被關閉。 – skaffman 2012-01-04 20:30:38
@skaffman只是出於好奇,爲什麼這句話使它不適合論壇?我認爲這將是使用其他框架的開發人員有趣的聽力點。我自己使用Vaadin,並沒有其他框架的經驗,並且真的想閱讀有關替代方案的意見。 – AndroidHustle 2012-01-05 11:29:17
@AndroidHustle:http://stackoverflow.com/faq#dontask – skaffman 2012-01-05 11:33:08