我已经检查了这个问题,发现了几个线程。尝试了所有解决方案,但都无济于事。我试图显示一个放置鼠标的十字形,应该将当前鼠标位置的x和y坐标显示在左上角和右上角。为了实现这一点,我使用了两个JLabel。 也许我忽略了什么?
我试过在标签,位置,框架和面板的不同布局中设置的标准文本-没有任何帮助。 以下代码应该足以理解,我认为如果遗漏了一些内容,将不会有所帮助。
for col in col_list:
df_bei_index[col+'_final'] = np.where(df_bei_index['Report No'] <=29, df_bei_index[col]*0.05 + df_bei_index['PDI_Average']*0.95, df_bei_index[col])
答案 0 :(得分:0)
您正在覆盖paint()
方法。因此,您需要将super.paint(g);
添加为覆盖的paint()
方法的第一行。
要正确显示2个标签,您需要添加this.setLayout(new FlowLayout(FlowLayout.LEFT));
行。
我将在此处添加具有上述更改的完整代码,以便您可以运行它并自己查看结果。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Fensterkreuz extends JComponent implements MouseMotionListener {
private JLabel jl1;
private JLabel jl2;
private Point cP;
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.setLayout(new FlowLayout(FlowLayout.LEFT));
//this.add(jl1);
//this.add(jl2);
this.setLayout(new GridBagLayout());
this.add(jl1, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0, GridBagConstraints.NORTHWEST,
GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
this.add(jl2, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.NORTHEAST,
GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
addMouseMotionListener(this);
}
public void mouseDragged (MouseEvent e){
}
public void mouseMoved (MouseEvent e) {
cP = e.getPoint();
repaint();
}
public void paint (Graphics g){
super.paint(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);
}
}
答案 1 :(得分:0)
在主方法的底部放置repaint()。重新绘制会调用您拥有的Paint方法,但我认为您还必须添加自己的替代重新绘制方法才能停止“闪烁”。