簡體   English   中英

我的繼承JLabel的類不會顯示,但是如果我將類型更改為JLabel,它將顯示

[英]My class inheriting JLabel won't show up but if I change the type to JLabel it does

好的,所以我開設了一個名為Tile的課程。 此類擴展了JLabel。

public Tile()
{
    super();
}

應該和JLabel一樣,不是嗎? 但是當我嘗試在代碼中使用它時,它不會顯示在正確的位置。 如果我調用Tile的邊界,它會提供我期望的結果,但它不在該位置。 http://puu.sh/58eUg.jpg和使用的圖塊,如果我在調用Tile的地方使用了JLabel,則使用http://puu.sh/58eVT.png

Container cPane = getContentPane();

    for(int x = 0;x<8;x++)
    {
        for(int y = 0;y<8;y++)
        {
            grid[x][y] = new Tile();
            grid[x][y].setBorder(BorderFactory.createLineBorder(Color.black));
            grid[x][y].setBounds(50*x,50*y,100,100);
            getContentPane().add(grid[x][y]);
            cPane.add(grid[x][y]);
        }
    }

任何幫助,將不勝感激。

啊哈,我對您的問題的評論是正確的-

讓我猜測:您已經重寫了getX()和getY()方法,卻沒有意識到您的方法是重寫方法,也許嗎? ...

實際上,您正在重寫getX()getY() 這些方法是布局管理器和GUI用於設置組件位置的JComponent的關鍵方法。 如果被覆蓋,您的組件在GUI上的行為將被完全弄亂。

除非必要,否則這就是避免擴展諸如組件之類的復雜類的原因之一。 優先考慮組成而不是繼承。

例如,您可以創建一個小的工廠方法來創建tile / JLabel,並且可以使用包含GUI所有智能的非GUI模型類來支持該組件。 例如,Conway的《生活游戲》,其中存在一個邏輯網格LifeSquares以及一個單獨的GUI,它僅是邏輯網格的“視圖”,並且具有傳遞用戶交互之類的連線,例如鼠標按下一個“控件”類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM