繁体   English   中英

JLabel清除文字

[英]JLabel clear text

我正在编写可ping服务器并返回值的程序。

我一直试图将ping覆盖到JFrame,其中JLabel在透明窗口中显示ping。

但是,每次我调用DrawOverlay()方法时,JLabel都会在先前绘制的标签之上重新绘制。

对于上下文,从另一个类PingTest调用DrawOverlay()

void DrawOverlay(String ping)
{
    JLabel lbl_ping = new JLabel(ping);
    lbl_ping.removeAll();//attempts at clearing the previously drawn label
    lbl_ping.revalidate();
    lbl_ping.repaint();

    if (!frame.isUndecorated())
    {
        frame.setUndecorated(true);
    }

    frame.setFocusableWindowState(false);
    frame.setBackground(new Color(0, 0, 0, 0));
    frame.setAlwaysOnTop(true);
    frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false);
    frame.getContentPane().setLayout(new java.awt.BorderLayout());
    lbl_ping.setFont(new Font("serif", Font.PLAIN, 48));
    lbl_ping.setForeground(Color.WHITE);
    lbl_ping.setText(ping);
    frame.add(lbl_ping);
    frame.setVisible(true);
    frame.pack();
}

有什么方法可以重画JFrame或JLabel来删除以前的数据?

每次调用DrawOverlay时,都会创建一个新的 JLabel:

JLabel lbl_ping = new JLabel(ping);

设置属性后,调用frame.add(lbl_ping); 这会将您的 JLabel添加到您的JFrame中。

您就是JLabel不会被覆盖或删除。

您要做的就是声明JLabel lbl_ping; 作为班级的私有成员,然后在创建JFrame时还要初始化JLabel并设置所有这些属性:

lbl_ping = new JLabel();

frame.setFocusableWindowState(false);
frame.setBackground(new Color(0, 0, 0, 0));
frame.setAlwaysOnTop(true);
frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false);
frame.getContentPane().setLayout(new java.awt.BorderLayout());
lbl_ping.setFont(new Font("serif", Font.PLAIN, 48));
lbl_ping.setForeground(Color.WHITE);
lbl_ping.setText(ping);
frame.add(lbl_ping);

// pack() first then setVisible()
frame.pack();
frame.setVisible(true);

看看这个 它解释了pack()的作用。

然后在DrawOverlay中 ,只需设置文本值并更新JFrame:

void DrawOverlay(String ping)
{
    lbl_ping.setText(ping);
    frame.getContentPane().validate(); // You modified child component lbl_ping (changed its size by setting a new text) so you need to recalculate all the child components
    frame.getContentPane().repaint(); // Redraws the content pane and all of its children
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM