首页 > 解决方案 > JLabel 不显示在 JPanel 上

问题描述

我已经查找了这个问题并找到了几个线程。尝试了所有解决方案,但没有一个有帮助。我试图在放置鼠标的位置显示一个十字,我当前鼠标位置的 x 和 y 坐标应该显示在左上角和右上角。为了实现这一点,我使用了两个 JLabel。也许我忽略了什么?

我玩弄了我在标签中设置的标准文本,定位,我的框架和面板的不同布局 - 没有任何帮助。以下代码应该足以理解,我认为如果我遗漏了一些东西会有所帮助。

Fensterkreuz(){
    jl1 = new JLabel("0");
    jl2 = new JLabel("0");
    jl1.setSize(new Dimension(100,100));
    jl2.setSize(new Dimension(100,100));
    jl1.setFont(new Font ("Arial", Font.PLAIN, 15));
    jl2.setFont(new Font ("Arial", Font.PLAIN, 15));
    cP = new Point();
    this.add(jl1);
    this.add(jl2);
    addMouseMotionListener(this);       
    }

public void mouseDragged (MouseEvent e){
}
public void mouseMoved (MouseEvent e) {
    cP = e.getPoint();
    repaint();
}
public void paint (Graphics g){
    g.drawLine((cP.x),(cP.y-15), (cP.x),(cP.y+15));
    g.drawLine((cP.x-15),(cP.y), (cP.x+15),(cP.y));
    jl1.setText(String.valueOf(cP.x));
    jl2.setText(String.valueOf(cP.y));
}

public static void main (String [] args) {
    JFrame f = new JFrame();
    JComponent test = new Fensterkreuz();
    test.setOpaque(false);
    f.setVisible(true);
    f.setSize(1500,1000);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setContentPane(test);
}

标签: javaswingjpaneljlabelpaint

解决方案


将 repaint() 放在 main 方法的底部。Repaint 调用您拥有的 Paint 方法,但我认为您还必须添加自己的覆盖 repaint 方法以停止“闪烁”。


推荐阅读