2016-03-29 18 views
4

Merhaba, vaadin içindeki bir kılavuza düğme eklemeye çalışıyorum ancak bu düğme üzerindeki başvuruyı yazdırır.Vaadin'de bir ızgarada düğme ekleme

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()); 
} 

nasıl ben üzerine yazısı "Add" yazdırabilirsiniz bu

enter image description here

+3

[ButtonRenderer] (https://vaadin.com/api/7.6.4/com/vaadin/ui/renderers/ButtonRenderer.html) ve [kitap örneğin] kontrol mü (http://demo.vaadin.com/book-examples-vaadin7/book/#component.grid.renderer.button)? – Morfic

+0

@Morfic Sanırım yorumunuz cevaptır. Başka bir bağlantı: https://vaadin.com/docs/-/part/framework/components/components-grid.html (bkz. ButtonRenderer paragraf) –

+0

Teşekkürler @Morfic. soru çözüldü :) örnek –

cevap

2

Sen Bir düğmeye

RendererClickListener ownerClickListener = new RendererClickListener() { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public void click(RendererClickEvent event) { 
     //Someone cliked button 
    } 
}; 
ButtonRenderer ownerRenderer = new ButtonRenderer(ownerClickListener, ""); 
grid.getColumn("ownerName").setRenderer(ownerRenderer); 
işlemek için ButtonRenderer kullanmak zorunda doğrudan Vaadin 7. ızgara bileşeni kullanamazsınız

Ancak Vaadin 8'deki bileşenleri kullanabilirsiniz, bkz. Grid Components in Vaadin 8.

Vaadin 7 kullanıyorum ve ButtonRenderer benim için tatmin edici değildi, çünkü FontIcon'u düğmeye eklemenin bir yolu yoktur ve HTML olarak eklemenin bir yolu yoktur. Bunun yerine component renderer addon kullanıyorum. İşte bunu nasıl kullandığını geçerli:

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()); 
+0

Ben bu eklentiyi bir IndexedContainer ile bir ızgara üzerinde v7 kullanmaya çalışıyorum ve yapamam. Bu örneği (veya demo kaynakları içinde ClassicGridTab.java) takip etmeye çalıştım - BeanItemContainer kullanıyor ve hatalarımın bundan kaynaklandığından şüpheleniyorum. NotABeanGridWithDecoratorTab.java demosu ile de denedim ancak bir GeneratedPropertyContainer kullanıyor. Yani şimdi çok kayboldum. Bunun nasıl çalıştığına dair ipuçları var mı? – Pere

+0

@ Gösterilecek bileşenleri döndüren mülk oluşturmak için GeneratedPropertyContainer'a ihtiyacınız var ve birincil verilerinizi saklayan başka bir içerik barındırıcıya ihtiyacınız var. Kılavuz, orijinal verileri ve oluşturulan verileri görebilmesi için kullanıcı GeneratedPropertyContainer veri kaynağına sahip olmalıdır. Örneğimde ayarlar veri kaynağını ızgarada görmüyorum, bu sizin sorununuz mu? Cevabımı en kısa zamanda düzenleyeceğim. Belki yeni soru oluşturmayı deneyin – Piro

+0

Yardım için teşekkürler @Piro. Cevabınızı düzenlemeye gerçekten gerek yok; yorumunuz her şeyi açıklıyor. Senin ipini deneyecek;) – Pere

3

Vaadin 8.1 - Şebeke

Vaadin 8.1'de Bileşenleri şimdi sahip dahili bir ComponentRenderer bir Grid kendi özel bileşenleri dahil düğmeler veya diğer bileşenleri görüntülemek için.

What's New sayfasında, "Kılavuzdaki Bileşenler" başlıklı ilk öğeye bakın.

Örnek: Kılavuza etiket ekleyin.

grid.addColumn(
    person -> new Label(person.getFullName()) , 
    new ComponentRenderer() 
).setCaption("Full Name") 
İlgili konular