2017-04-30 21 views
0

フレームにパネルを追加しようとしていますが、わかりにくいエラーが1つ続けられます。メソッドadd(Component)は引数には適用されません

Multiple markers at this line 
    - Debug Current Instruction Pointer 
    - The method add(Component) in the type Container is 
     not applicable for the arguments (TestPanel) 
import javax.swing.*; 

public class FrameTest3 { 

    public static void main(String[] args) { 
     TestPanel samplePanel=new TestPanel(); 
     JFrame sampleFrame = new JFrame(); 
     sampleFrame.getContentPane().add(samplePanel); 
     sampleFrame.setSize(300,200); 
     sampleFrame.setVisible(true); 
     System.out.println("Done"); 
    } 
} 

import java.awt.*; 
import javax.swing.*; 

public class TestPanel extends JPanel { 

    public void paintComponent(Graphics g) { 
     g.setColor(Color.red); 
     g.drawString("hello", 30, 80); 
    } 
} 
+0

あなたのコードは私のために働くようです。これら2つのクラスはそれぞれのファイルにありますか?同じパッケージで?あなたの質問に完全なエラーメッセージを投稿できますか? –

+0

私のためにもうまくいきます。エラーに関する詳細情報を入力してください。 –

+0

@HovercraftFullOfEelsこれらは同じパッケージ(デフォルトパッケージ)の2つのクラスです これは完全なエラーメッセージです "この行の複数のマーカー - 現在の命令ポインタをデバッグする - コンテナのメソッドadd(Component)は引数には適用されません(TestPanel) " –

答えて

1

あなたのコードに基づいてこの完全な、実施例では、問題はビルド環境であることを示唆しています。さらに、

  • は、暗黙のうちに競合ペインに転送されます。

  • のみを作成して操作します。

  • 実際にgetPreferredSize()を上書きする場合は、setSize()を使用しないでください。

  • を避けるためにsuper.paintComponent()を呼び出します。

  • テストの便宜のために、private staticクラスは意味的にpackage-privateクラスに相当します。

image

import java.awt.*; 
import javax.swing.*; 

public class FrameTest3 { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(() -> { 
      TestPanel samplePanel = new TestPanel(); 
      JFrame sampleFrame = new JFrame(); 
      sampleFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      sampleFrame.add(samplePanel); 
      sampleFrame.pack(); 
      sampleFrame.setVisible(true); 
      System.out.println("Done"); 
     }); 
    } 

    private static class TestPanel extends JPanel { 

     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(Color.red); 
      g.drawString("hello", 30, 80); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(300, 200); 
     } 
    } 
} 
関連する問題