gpt4 book ai didi

java - 标签无故添加到 JPanel

转载 作者:行者123 更新时间:2023-12-01 22:18:12 26 4
gpt4 key购买 nike

我正在尝试制作一个简单的绘画应用程序。我有一个主要方法来设置 JFrame,然后使用 flowlayout 添加 JPanel 和 JLabel。 JLabel 用于计算点击次数。

面板类实现了 mouselistener 和 mousemotionlistener。

问题是当我绘制某些内容或单击面板时,它也会将标签添加到 JPanel 中,并且根据我单击的位置,它可以将其添加到面板中两次,这让我很生气。我只是不明白为什么它被添加到 JPanel 中。

此外,JPanel 周围有边框,当我单击或绘制某些内容时,它会在面板上的某处添加新的垂直边框,每次都是随机的。

Picture showing what I mean.

两个类的代码:

public class mainepanel extends JPanel implements  MouseMotionListener, MouseListener{

Graphics globalGraphics;
int clickCount = 0;

public mainepanel(){
setBorder(BorderFactory.createLineBorder(Color.black));
setPreferredSize(new DimensionUIResource(200,200));
addMouseMotionListener(this);
addMouseListener(this);
validate();
setFocusable(true);
}

public void paintComponent(Graphics g){
globalGraphics = g.create();
}

@Override
public void mouseDragged(MouseEvent e) {
globalGraphics.fillOval(e.getX(), e.getY(), 10,10);
repaint();
}

@Override
public void mouseClicked(MouseEvent e) {
clickCount ++;
maine.setLabel(clickCount);
globalGraphics.fillOval(e.getX(), e.getY(), 10,10);
repaint();
}

缅因州

public class maine extends JFrame{
static JLabel label;

public maine(){
setSize(600,400);
setDefaultCloseOperation(3);
setResizable(false);

label = new JLabel("Clicks:");
setLayout(new FlowLayout());
add(label);
add(new mainepanel());
setVisible(true);
}

public static void setLabel(int clicks){
label.setText("Clicks: " + clicks);
}

public static void main(String[]args){
new maine();
}
}

最佳答案

paintComponent 中执行所有绘图(并确保调用 super.paintComponent) - MouseListener/MouseMotionListener code> 应该只需要更改数据模型(如果需要,请调用 repaint 以便 UI 反射(reflect)更改)。

下面是一个简单的示例,其中通过鼠标单击创建了一个圆圈,并通过拖动鼠标移动:

Point center = null;
...
@Override
public void mouseClicked(MouseEvent e){
center = e.getPoint();
repaint();
}
@Override
public void mouseDragged(MouseEvent e){
center = e.getPoint();
repaint();
}
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
if ( center != null ){
g.fillOval(center.getX(), center.getY(), 10, 10);
}
}

关于java - 标签无故添加到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com