2014-03-04 148 views
0

我知道如何將JButton添加到JPanel,但我如何創建類?將對象添加到Jpanel

我有這個類:

public class Monster 
{ 
    private ImageIcon monster; 
    private JButton b; 

    public Monster() 
    { 
     monster = new ImageIcon("Monster.jpg"); 
     b = new JButton(monster); 
     b.setIcon(monster); 
    } 
} 

我有另一個類,並在該類我想要的圖標添加到我的揮杆窗口。

import javax.swing.*; 
import java.awt.*; 
public class GameWindow 
{ 
    private JFrame frame; 
    private JPanel panel; 
    private Monster monster; 

    public GameWindow() 
    { 
     frame = new JFrame(); 
     panel = new JPanel(); 
     monster = new Monster(); 

     panel.add(monster); 

     frame.setContentPane(panel); 
     frame.setTitle("Game"); 
     frame.setSize(400,400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

panal.add()方法適用於JButtons,但不適用於我的Monster類。如何將我的Monster對象添加到我在GameWindow類中創建的Swing窗口中?

+3

爲什麼沒有擴展'JButton'一類? – AntonH

+0

您可以讓您的類擴展JComponent並將兩個元素添加到它中! – ItachiUchiha

+2

不要擴展,返回此對象,搜索inherintace v.s.構圖 – mKorbel

回答

2

您應該使用Swing組件。擴展Swing組件(或任何其他Java類)的唯一原因是如果您想重寫某個類方法。

您錯過了Monster類中的一個方法。

public class Monster 
{ 
    private ImageIcon monster; 
    private JButton b; 

    public Monster() 
    { 
     monster = new ImageIcon("Monster.jpg"); 
     b = new JButton(monster); 
     b.setIcon(monster); 
    } 

    public JButton getMonsterButton() { 
     return b; 
    } 
} 

在GameWindow類的附加線路是這樣的:

panel.add(monster.getMonsterButton()); 
0

讓您的課程延伸ImageIconJButton。這是因爲JPaneladd()方法預計JComponent

1

試試這個,因爲JPanel接受Swing UI組件,這使得您的MonsterIcon類搖擺的一部分(用通俗的人的任期)

public class MonsterIcon extends JButton { 

     public MonsterIcon() { 
     this(new ImageIcon("Monster.jpg")); 
     } 

     public MonsterIcon (ImageIcon icon) { 
     setIcon(icon); 
     setMargin(new Insets(0, 0, 0, 0)); 
     setIconTextGap(0); 
     setBorderPainted(false); 
     setBorder(null); 
     setText(null); 
     setSize(icon.getImage().getWidth(null), icon.getImage().getHeight(null)); 
     } 
} 
+0

這適用,但圖標不顯示。我只得到一個非常小的空白JButton。 – user294698

+0

由於您正在擴展jbutton,因此您不需要'private JButton b;'語句,請使用'this.setIcon ...' – slackmart

+0

@ user294698編輯我的答案! – ItachiUchiha