2017-03-21 59 views
0

我對LibGDX API是一種新手,我試圖在表格(和表格內的表格)內組織標籤和ImageButtons。當我運行該應用程序時,ImageButtons不會被拖到屏幕上。LibGDX ScrollPane不繪製ImageButton

我到處搜索,無法找到答案,所以我非常感謝您的幫助。

編輯:這可能是因爲我在表內使用表,但我沒有發現任何關於嵌套表或類似的東西說實話。

我所說的方法使保持標籤的文字變化,看起來像這樣:

public void drawTable(){ 
    final Table scrollTable = new Table(); 
    scrollTable.addActor(canbtn); 
    scrollTable.row(); 
    //other buttons 

    Label.LabelStyle style = new Label.LabelStyle(font, Color.WHITE); 
    Label.LabelStyle style2 = new Label.LabelStyle(font2, Color.WHITE); 

    CustomLabel amtLabel = new CustomLabel("" + (int)(game.tot.getSum()), style); 
    CustomLabel mizcoins = new CustomLabel("Mizcoins", style2); 
    CustomLabel mpsCount = new CustomLabel(game.totMPS + " MPS", style2); 

    PerSec can = game.boosts.get("Can").getPerSec(); 

    Table t = new Table(); 
    t.add(drawer(can, canbtn)); 
    t.row(); 
    scroller = new ScrollPane(t); 

    table = new Table(); //the container table 
    table.setFillParent(true); 
    table.add(amtLabel).padTop(50); 
    table.row(); 
    table.add(mizcoins); 
    table.row(); 
    table.add(mpsCount); 
    table.row(); 
    table.add(scroller).fill().expand();//.space(350).padBottom(10); 
} 

和抽屜()函數:

public Table drawer(PerSec perSec, ImageButton imgbtn){ 
    Label.LabelStyle style = new Label.LabelStyle(font2, Color.WHITE); 
    Label.LabelStyle style2 = new Label.LabelStyle(font2, Color.WHITE); 
    Label.LabelStyle style3 = new Label.LabelStyle(font2, Color.RED); 

    CustomLabel nameLabel = new CustomLabel(perSec.getType(), style); 
    CustomLabel priceLabel = new CustomLabel("Price: " + perSec.getPrice(), style2); 
    CustomLabel addsLabel = new CustomLabel("Adds: " + perSec.getDefAddPerSec(), style2); 
    CustomLabel youHaveLabel = new CustomLabel("You Have: " + perSec.getAmt(), style3); 

    Table mainTable = new Table(); 
    Table smallTable = new Table(); 

    smallTable.add(priceLabel); 
    smallTable.row(); 
    smallTable.add(youHaveLabel); 

    mainTable.add(nameLabel); 
    mainTable.add(imgbtn); 
    mainTable.row(); 
    mainTable.add(smallTable); 
    mainTable.add(addsLabel); 

    return mainTable; 

} 
+0

有幾個彈出的ngs是:您首先在canbtn上執行「addActor」,然後在「drawer()」中將其添加到其他內容中。這否決了以前的添加調用,因爲演員只能有1個父項。另外add和addActor的工作方式也不一樣。 addActor將其僅作爲子項。而add()則會創建一個表格單元格,並將其添加到其中。使其使用表格的對齊功能。問題可能是:重寫添加,將其添加到錯誤的表。或者將其添加爲0的大小。 –

+0

我無法完全理解你要做什麼,因爲我認爲我堅持了我的想法。我會粘貼一個鏈接,向您展示我的設計目標:http://imgur.com/a/tpVnZ –

回答

0

一些僞代碼給你如何表現我會去創建這樣的表格(如您在評論中的圖片所述)

private void setupScrollPane() 
{ 
    ScrollPane pane = new ScrollPane(generatePanels()); 
    pane.setBounds(0,0,Gdx.graphics.getWidth(),Gdx.graphics.getHeight()); 
    stage.addActor(pane); 
} 

private Table generatePanels() 
{ 
    Table list = new Table(); 
    for(int i=0;i<2;i++) 
    { 
     list.add(genetePanel()).row(); 
    } 
    return list; 
} 

private Table genetePanel() 
{ 
    Table root = new Table(); 
    root.setSize(400,200); 

    Table left = new Table(); 
    Table middle = new Table(); 
    Table right = new Table(); 

    left.add().growY().row();  //an empty row for padding 
    left.add(new Label("Price label")).row(); 
    left.add(new Label("you have label")).row(); 
    left.add().growY().row();  //an empty row for padding 

    middle.add(new Label("Name label")).row(); 
    middle.add().growY().row(); //an empty row for padding 

    right.add(new ImageButton()).row(); 
    right.add(new Label("Adds label")).row(); 

    root.add(left).growX(); 
    root.add(middle).growX(); 
    root.add(right).growX(); 
} 
+0

嘿!首先,非常感謝。現在,我已經測試了你的代碼,並且每次我加載屏幕時都會在屏幕上添加第一個列表的副本,所以基本上在第一次加載時我有2個項目,然後是第二個4,然後是6,然後是8等等on ...你如何克服這個問題,以及如何更新它,以便在點擊ImageButton時「你有」和「價格」標籤發生變化?非常感謝你,再次... –

+0

在構造函數或設置函數中設置屏幕。如果你真的想在show()中做到這一點。保留一個布爾值來檢查它是否已經被設置。如果需要,您可以將其解除設置。 –