2012-03-06 11 views
2

コードを実行しても表示されません。 基本的に私はJFrameまたはViewに追加したカスタムJcomponentを持っていて、メインメソッドでフレームを作成するビューを作成します。私はすでにここのJFrameに追加 はJComponentのための私のコードです:JComponentのためにカスタムJComponentの画像は表示されませんか?

public class CardDisplay extends JComponent { 
private Card card; 
private Image cardImage; 

public CardDisplay() 
{ 
    cardImage = Toolkit.getDefaultToolkit().createImage(("Phase10//res//Blue2.png")); 
} 

@Override 
public void paint(Graphics g) 
{ 
    g.drawImage(cardImage, 125 ,200, this); 
} 
public class View { 
public View(){ 

} 

public void makeFrame() 
{ 
    JFrame frame = new JFrame("Phase 10"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new BorderLayout()); 
    JPanel handPanel = new JPanel(); 
    CardDisplay cd = new CardDisplay(); 
    handPanel.setLayout(new FlowLayout()); 
    frame.add(handPanel, BorderLayout.SOUTH); 
    handPanel.add(cd); 
    frame.pack(); 
    frame.setSize(600,500); 
    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 

public static void main(String[] args){ 
    View view = new View(); 
    Game game = new Game(); 
    view.makeFrame(); 
    //game.run(); 

} 
+0

私のポストを参照してくださいhttp://stackoverflow.com/a/8422427/1007845 – Adrian

+0

アプリを起動するときにこれはおそらくEventQueueの問題です。アプリケーションを起動するコード行を追加し、CardDisplayを作成します。 – Serhiy

+0

@Adrian - それを試しましたが、それでも動作しません。 – Rendition

答えて

3

ここに作業バージョンがあります。この問題は、主にコンポーネントの好ましいサイズに関連していました。メソッドgetPreferredSize()の実装に注意してください。

コンポーネントの境界線を確認したい場合は、MigLayoutレイアウトマネージャをデバッグモードで使用することをお勧めします(このサイトにはすべての必要なドキュメントがあります)。

public class CardDisplay extends JComponent { 
    private BufferedImage cardImage; 

    public CardDisplay() { 
     try { 
      cardImage = ImageIO.read(new File("Phase10//res//Blue2.png")); 
     } catch (final IOException e) { 
      e.printStackTrace(); 
     }  
    } 

    @Override 
    public void paintComponent(final Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(cardImage, 0, 0, null); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (cardImage == null) { 
      return new Dimension(100, 100); 
     } else { 
      return new Dimension(cardImage.getWidth(null), cardImage.getHeight(null)); 
     } 
    } 

    public static class View { 
     public View() {} 

     public void makeFrame() { 
      final JFrame frame = new JFrame("Phase 10"); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setLayout(new BorderLayout()); 
      final JPanel handPanel = new JPanel(); 
      final CardDisplay cd = new CardDisplay(); 
      handPanel.setLayout(new FlowLayout()); 
      frame.add(handPanel, BorderLayout.SOUTH); 
      handPanel.add(cd); 
      frame.pack(); 
      frame.setResizable(false); 
      frame.setLocationRelativeTo(null); 
      frame.setVisible(true); 
     } 
    } 

    public static void main(final String[] args) { 
     final View view = new View(); 
     view.makeFrame(); 
    } 
} 
+0

+1、getPreferredSize()thingy :-)を無効にする –

+0

あなたのコードを実装しましたが、入力ファイルを読み込めないというエラーを送信しますか?私はこれを投稿して同じことをする前にImageIO.readを使ってみました。私は、ファイル拡張子が問題ではないことを確認するために、クラスと同じフォルダにファイルを移動しようとしました。 – Rendition

+0

このコードのために作成したローカルプロジェクトでは、単に実際のファイルがプロジェクトのベースに配置されていたのは単に「image.jpg」でした。 – 01es

2

、あなたはpaintComponent代わりの塗料を使用しています。ペイントは実際にコンポーネントを描画するために使用され、paintComponentはイメージを描画するために使用されます。

+0

paintComponent(Graphics g) – Rendition

+0

@Shawn Shroyer +1 for paintComponent() – mKorbel

+0

+1 paintComponent(...)をSwingに通知するために、JComponentのgetPreferredSize()をオーバーライドします。 ()を押すと、出力に表示する内容が表示されます。 –

関連する問題