2017-08-06 9 views
0

私の質問は、グラフィックスで作成された円の上にボタンを表示する方法です。私のコードは:私はグラフィックの上に表示ボタンを表示することはできません

public class Grafik extends JFrame { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Grafik frame = new Grafik(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 


    public Grafik() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 784, 419); 

     JPanel contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     JButton btnNewButton = new JButton("Click"); 
     btnNewButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       fire(); 
      } 
     }); 

     btnNewButton.setBounds(64, 73, 32, 32); 
     contentPane.add(btnNewButton); 
    } 

    public void fire() 
    { 
     JPanel panel = new JPanel(){ 
      @Override 
      public void paint(Graphics g) 
      { 
       g.setColor(Color.black); 
       g.drawOval(20, 20, 400, 400); 
       g.fillOval(20,20,400,400); 

       g.setColor(Color.white); 
       g.drawOval(60, 60, 300, 300); 
       g.fillOval(60,60,300,300); 



      } 
     }; 

     panel.setBounds(10, 27, 383, 233); 
     setContentPane(panel); 

     JButton btn = new JButton(); 
     btn.setIcon(new ImageIcon("C:\\Users\\nuria\\Desktop\\icon1.png")); 
     btn.setBounds(75, 76, 32, 32); 
     panel.add(btn); 

    } 
} 

このコードは私のプロジェクトの一部です。プロジェクトには多くのパネルがあり、私の火の方法は最初に呼び出されません。私は火のメソッドが6番目のパネルによって呼び出されることを意味します。私はボタンで2つの円を描く必要があります。これらのボタンは2つの円の間にある必要があります。しかし、私は直接ボタンを表示することはできません。私がボタンをホバーすると、それらが表示されます。私は第6パネルが開くとすぐにボタンを表示したい。 私は上記の2つのボタンを持っています。最初のボタンをクリックすると、別のパネルが開き、それらの間に円(グラフィックで作成)と別のボタン(アイコン付き)が表示されます。

+1

1)コードスニペット、HTML/XMLや入出力などの構造化文書には、コードの書式設定を使用してください。これを行うには、テキストを選択し、メッセージの投稿/編集フォームの上部にある「{}」ボタンをクリックします。 2)Java GUIは、異なるロケールで異なるPLAFを使用する異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –

答えて

1
JPanel panel = new JPanel(){ 
     @Override 
     public void paint(Graphics g) 
     { 

paint()をオーバーライドしないでください。カスタムペインティングはpaintComponent()をオーバーライドして行われ、super.paintComponent()を最初のステートメントとして呼び出すことを忘れないでください。

現在のコードの問題点は、塗料をオーバーライドすると、パネルのデフォルトの塗装ロジックが変更され、子コンポーネントが塗装されないということです。

詳細および詳細については、Custom PaintingのSwingチュートリアルのセクションを参照してください。特に、A Closer Look at the Paint Mechanismのセクションを参照してください。

関連する問題