【问题标题】:BorderLayout not position component in correct positionBorderLayout 未将组件定位在正确位置
【发布时间】:2012-02-14 02:32:02
【问题描述】:

我分别在 MouseEnter 和 MouseExit 上添加和删除 JButton。这工作正常,但是当按钮添加到面板时,它会显示在右上角,而不是指定的 BorderLayout.SOUTH 位置。

Frame只有一个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

谁能解释一下这个问题?

【问题讨论】:

  • 您确定在您的JPanel 中使用BorderLayout 吗?
  • 不要粘贴源代码的链接。发布您的代码,以便任何人都可以提出建议。
  • 请学习java命名约定并遵守它们
  • 不相关:删除 btn.setSize(..),这是不必要的混乱(没有任何影响)
  • @AshBurlaczenko 该 zip 被列为 122.0 kB。 SSCCE 应该少于 200 行代码(有人会说更短)。因此,我可以得出结论,(压缩后)达到 122 KB 的源是 不是 S 或不是 SC! 请阅读人们提供的链接,以后。 -1

标签: java swing layout-manager mouselistener


【解决方案1】:

打电话

revalidate();
repaint(); 

添加/删除后。

让它可见/不可见会更好吗?

【讨论】:

    【解决方案2】:

    以下对我来说没有问题,即按钮确实出现在南边。正如 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();
        }
    }  
    

    【讨论】:

      猜你喜欢
      • 2020-08-11
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      相关资源
      最近更新 更多