Java MouseListener mouseClicked()缺少第一个事件
现在是内部阶级Java MouseListener mouseClicked()缺少第一个事件,java,swing,awt,Java,Swing,Awt,现在是内部阶级 public class TesterApplication { static JPanel CenterPanel; public static void main(String[] args){ /* get image MapImg */ JFrame frame=new JFrame(); CenterPanel = new JPanel(){ @Override protected void paintComponen
public class TesterApplication {
static JPanel CenterPanel;
public static void main(String[] args){
/* get image MapImg */
JFrame frame=new JFrame();
CenterPanel = new JPanel(){
@Override
protected void paintComponent(Graphics g){
g.drawImage(MapImg, 0, 0, null);
}
};
CenterPanel.addMouseListener(new LineBuildListener(new TesterApplication()));
frame.getContentPane().add(BorderLayout.CENTER, CenterPanel);
frame.setSize(x, y);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
同时,我第一次点击,我的GUI闪烁,点击计数器打印,我已经点击了一次,但我没有得到我的第一个圆圈。如果我一直单击“一切正常”,它会打印下一个圆,增加计数器并在它们之间画线,这样我就不明白为什么第一个圆丢失了
class LineBuildListener implements MouseListener {
TesterApplication TA;
int xFirstClick;
int yFirstClick;
int ClickCounter=0;
int xClick;
int yClick;
LineBuildListener(TesterApplication TA){
this.TA=TA;
}
@Override
public void mouseClicked(MouseEvent e) {
xFirstClick=xClick;
yFirstClick=yClick;
xClick=e.getX();
yClick=e.getY();
TA.CenterPanel.getGraphics().fillOval(xClick, yClick, 10, 10);
if(ClickCounter!=0){
SecondClick();
ClickCounter++;
}else{
ClickCounter++;
}
System.out.println(ClickCounter);
}
public void SecondClick(){
TA.CenterPanel.getGraphics().drawLine(xClick, yClick, xFirstClick,yFirstClick);
}
}
xClick和yClick在第一次初始化时未初始化为什么要将新的TesterApplication传递到鼠标侦听器中?然后将有两个实例。在TesterApplication中的主方法中,将“new TesterApplication()”更改为“this”。我得到错误“非静态变量this不能从静态上下文引用”我不明白,它们有值,Fillova()使用该值,我只是尝试添加System.out.println(单击计数器);System.out.println(xClick);System.out.println(yClick);,首先,单击“有所有值来构建圆”
xFirstClick=xClick;
yFirstClick=yClick;
xClick=e.getX();
yClick=e.getY();