こんにちは私はvaadinのグリッドにボタンを追加しようとしましたが、ボタンオブジェクトに参照を出力します。
Grid statementEnquiriesList = new Grid();
statementEnquiriesList.addColumn("", Button.class);
statementEnquiriesList.addColumn("DATE/TIME", String.class);
statementEnquiriesList.addColumn("TRANSACTION ID", String.class);
statementEnquiriesList.addColumn("FROM", String.class);
// historyList is an array object
for (int i = 0; i < historyList.size(); i++)
{
HistoryList recordObj = historyList.get(i);
Button addBtn = new Button();
addBtn.setCaption("Add");
statementEnquiriesList.addRow(addBtn , recordObj.getDate(), recordObj.getTransactionId(), recordObj.getFrom());
}
これに「追加」キャプションを印刷するにはどうすればよいですか
Vaadin 7では、グリッド内のコンポーネントを直接使用することはできません。ボタンをレンダリングするには、 ButtonRenderer を使用する必要があります。
RendererClickListener ownerClickListener = new RendererClickListener() {
private static final long serialVersionUID = 1L;
@Override
public void click(RendererClickEvent event) {
//Someone clicked button
}
};
ButtonRenderer ownerRenderer = new ButtonRenderer(ownerClickListener, "");
grid.getColumn("ownerName").setRenderer(ownerRenderer);
ただし、Vaadin 8のコンポーネントを使用することはできます。 Vaadin 8のグリッドコンポーネント を参照してください。
私はVaadin7を使用していますが、FontIconをボタンに追加する方法がなく、HTMLとして挿入する方法もないため、ButtonRendererは不十分でした。代わりに コンポーネントレンダラーアドオン を使用しました。これが私がそれをどのように使用したかです:
Grid grid = new Grid();
BeanItemContainer<EventChange> dataSource = //... primary data source
GeneratedPropertyContainer dataSource2 = new GeneratedPropertyContainer(dataSource);
grid.setContainerDataSource(dataSource2);
dataSource2.addGeneratedProperty("ownerWithButton", new PropertyValueGenerator<Component>() {
private static final long serialVersionUID = 1L;
@Override
public Component getValue(Item item, Object itemId, Object propertyId) {
ClickListener ownerClickListener = new ClickListener() {
private static final long serialVersionUID = 1L;
@Override
public void buttonClick(ClickEvent event) {
// do something, user clicked button for itemId
}
};
Button button = new Button(FontAwesome.USER);
button.addClickListener(ownerClickListener);
return button;
}
@Override
public Class<Component> getType() {
return Component.class;
}
});
grid.setColumns("ownerWithButton", /*and rest of your columns*/);
grid.getColumn("ownerWithButton").setRenderer( new ComponentRenderer());
Vaadin 8.1には、独自のカスタムコンポーネントを含むボタンやその他のコンポーネントをグリッドに表示するための組み込みの ComponentRenderer
があります。
What's New ページの最初の項目「ComponentsinGrid」を参照してください。
例:グリッドにラベルを追加します。
grid.addColumn(
person -> new Label( person.getFullName() ) ,
new ComponentRenderer()
).setCaption( "Full Name" )