2012-01-19 9 views
0

MouseEnterとMouseExitでそれぞれJButtonを追加したり削除したりしています。これは正常に機能していますが、ボタンがパネルに追加されると、BorderLayout.SOUTHの代わりに右上に表示されます。Border正しい位置にコンポーネントを配置しないでください

フレームのみのJPanelを持っており、私が追加しただけの行が

jPanel1.addMouseListener(new myMouseListener(jPanel1)); 

あるマウスリスナー

package example; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JButton; 
import javax.swing.JPanel; 
public class myMouseListener extends MouseAdapter{ 
    JButton btn; 
    JPanel panel; 

    public myMouseListener(JPanel panel) 
    { 
     this.panel = panel; 
     this.btn = new JButton("Test"); 
     this.btn.setSize(40, 40); 
    } 

    public void mouseEntered(MouseEvent e) { 
     panel.setBackground(Color.red); 
     panel.add(btn, BorderLayout.SOUTH); 
    } 

    public void mouseExited(MouseEvent e) { 
     panel.setBackground(Color.blue); 
     panel.remove(btn); 
    } 
} 

あなたはここに
http://www.filehosting.org/file/details/302851/Example.zip

をsscceをダウンロードすることができ、誰問題についていくつか光を当てましたか?追加/削除した後

+1

'JPanel'で' BorderLayout'を使用していますか? –

+2

ソースコードのリンクを貼り付けません。誰かが提案できるようにコードを投稿してください。 – adatapost

+2

Java命名規則を覚えておいてください。 – kleopatra

答えて

5

コール

revalidate(); 
repaint(); 

代わりに表示/非表示にする方がよいでしょうか?

0

以下は問題なく動作します。つまり、ボタンが南側に表示されます。 stanislavLによって示唆されているように、コンポーネントのrevalidateを発行するとうまくいくようです。答えを完全に却下する前に少しデバッグ/リサーチをしてください!

public class LayoutTest 
{ 
    public LayoutTest() 
    { 
     JFrame f = new JFrame(); 
     f.setLayout(new BorderLayout()); 
     JPanel p = new JPanel(new BorderLayout()); 
     p.addMouseListener(new MyMouseListener(p)); 
     f.add(p, BorderLayout.CENTER); 
     f.pack(); 
     f.setVisible(true); 
    } 

    public static void main(String args[]) 
    { 
     new LayoutTest(); 
    } 
} 
class MyMouseListener extends MouseAdapter{ 
    JButton btn; 
    JPanel panel; 

    public MyMouseListener(JPanel panel) 
    { 
     this.panel = panel; 
     this.btn = new JButton("Test"); 
     this.btn.setSize(40, 40); 
    } 

    public void mouseEntered(MouseEvent e) { 
     panel.setBackground(Color.red); 
     panel.add(btn, BorderLayout.SOUTH); 
     panel.revalidate(); 
    } 

    public void mouseExited(MouseEvent e) { 
     panel.setBackground(Color.blue); 
     panel.remove(btn); 
     panel.revalidate(); 
    } 
} 
関連する問題