BorderLayout не позиционирует компонент в правильном положении - PullRequest
0 голосов
/ 19 января 2012

Я добавляю и удаляю JButton на MouseEnter и MouseExit соответственно.Это работает нормально, но когда кнопка добавлена ​​на панель, она появляется в верхнем правом углу вместо указанной позиции BorderLayout.SOUTH.

Кадр имеет только 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);
    }
}

sscce можно скачать здесь
http://www.filehosting.org/file/details/302851/Example.zip

Может кто-нибудь пролить свет на проблему?

Ответы [ 2 ]

5 голосов
/ 19 января 2012

Позвоните

revalidate();
repaint(); 

после добавления / удаления.

Может быть, вместо этого лучше сделать его видимым / невидимым?

0 голосов
/ 20 января 2012

Следующее работает для меня без проблем, т.е. кнопка появляется на юге.Выдача revalidate для компонента, как предлагает stanislavL, кажется, работает просто отлично.Пожалуйста, сделайте небольшую отладку / исследование, прежде чем сразу отклонить ответы!

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();
    }
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...