2016-08-04 3 views
0

私はJFrameを持っています。フレームをクリックすると、Component(この場合はCanvasの拡張子)を追加します。なぜMouseListenerを使用してJFrameにコンポーネントを追加できないのですか?

frame.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      frame.add(canvas); 
      frame.repaint(); 
     } 
    }); 

しかし、成分はマウスがフレームにクリックされたときに追加されていない次のようにIフレームにMouseListenerを添加しました。私は、私の主な方法でコンポーネントを追加することに問題はありません。マウスリスナーでprintステートメントを追加すると、フレームからコンポーネントを削除する場合と同様に、正しく印刷されます。

+0

どのようなレイアウトですか?revalidate()も必要です –

+0

あなたの再描画の前に 'frame.pack()'を追加してみてください。 – sprinter

+0

[この回答](http://stackoverflow.com)で示すように['CardLayout'](http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html)を使用してください。/a/5786005/418556)。 –

答えて

0

@ sprinter9と同様、frame.pack()を追加してから再描画してください。 あなたがたJFrameに直接コンポーネントを追加している

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

public class Frame { 
    public static void main(String[] args){ 
     final JFrame frame = new JFrame("Add Component"); 
     final Canvas canvas = new Canvas(); 
     canvas.setBackground(Color.BLACK); 

     frame.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e) { 
       System.out.println("Clicked"); 
       frame.add(canvas); 
       frame.pack(); 
       frame.repaint(); 
      } 
     }); 


     frame.setMinimumSize(new Dimension(320,240)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 

デモ、http://kurungkurawal.com/gifs/frame-add-component.gif

+0

もっと良いアプローチは、 'CardLayout'を使うことです。 –

0

の下に試してみてください。

frame.getContentPane().add(canvas); 
+0

Java 1.5以降ではこれは必要ではありません。 –

関連する問題