2016-08-04 138 views
0

我有一個JFrame。當我點擊框架時,我想添加一個Component(在這種情況下是Canvas的擴展名)。我添加了一個MouseListener到幀如下:爲什麼我不能使用MouseListener將組件添加到JFrame?

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

然而,當點擊了幀鼠標上的部件不會被添加。在我的主要方法中添加組件沒有問題。在鼠標偵聽器中添加打印語句正確打印,正如從框架中刪除組件一樣。

+0

什麼是佈局?'revalidate()'也需要 –

+0

嘗試在重繪之前添加'frame.pack()'。 – sprinter

+0

使用['CardLayout'](http://download.oracle.com/javase/8/docs/api/java/awt/CardLayout.html)如[本答案]中所示(http://stackoverflow.com /一個/418556分之5786005)。 –

回答

0

像@ sprinter9說的,在重新粉刷之前加frame.pack()。 嘗試以下

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

您直接添加組件到JFrame。你應該使用它的contentPane來代替:

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

從Java 1.5開始就沒有必要。 –

相關問題