gpt4 book ai didi

java - 如何在 CLONE JPanel 中使用 paint()?

转载 作者:行者123 更新时间:2023-11-30 12:00:05 25 4
gpt4 key购买 nike

任何人都知道如何在克隆 JPanel 中重新绘制。我正在使用 CLONE,所以我可以重绘 () 一个,另一个会自动执行相同的操作。

如果我在原始面板或克隆面板中移动鼠标,我的代码只会绘制原始 JPanel,

但是如果我在克隆面板中移动鼠标,这个 jpanel 不会绘制。

提前致谢

代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class ProcessorClone {

public static void main(String[] args) {

JFrame aWindow = new JFrame();
aWindow.setBounds(300, 200, 300, 100);
aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Container content = aWindow.getContentP
aWindow.setVisible(true);

CardViewer panel02=new CardViewer();
CardViewer panel01= (CardViewer) panel02.clone();

aWindow.setLayout(new BorderLayout());

aWindow.add(panel01,BorderLayout.NORTH);
aWindow.add(panel02,BorderLayout.SOUTH);

panel01.setBackground(Color.RED);
panel02.setBackground(Color.blue);

panel01.repaint();
panel02.repaint();

panel01.validate();
panel02.validate();

}
}

class CardViewer extends JPanel implements MouseListener,MouseMotionListener, Cloneable {

/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel mContentPaneBorder;
private JPanel mContentPane;
private JButton FileButton=new JButton("AAA");
private Point p;

public CardViewer(){
super();
this.add(FileButton);


addMouseListener(this);
addMouseMotionListener(this);

}
@Override
public void mouseClicked(MouseEvent arg0) {
System.out.println("mouseClicked");

}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
System.out.println("mousePressed");
p = null;
repaint();
}

@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseMoved(MouseEvent e) {
System.out.println("mouseMoved");
p = e.getPoint();
this.repaint();
this.validate();
}

public void paint(Graphics g) {
System.out.println( g.getClass() );
if (p != null) {
Dimension d = getSize();
int xc = d.width / 2;
int yc = d.height / 2;
g.drawLine(p.x, p.y, p.x, p.y);
this.setBackground(Color.pink);
}

}
public Object clone () {

// First make exact bitwise copy
CardViewer copy = null;
try {
copy = (CardViewer)super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return copy;
}
}

最佳答案

.clone() 不返回 JPanel 的镜像,而是返回对象的副本,因此您实际上有 2 个独立的 JPanel 对象,因此一个中的操作不会自动反射(reflect)到另一个中。

您可以使用对 .cloned() JPanel 对象的引用覆盖从 JPanel 继承的组件中的所有操作,然后在调用 super() 之后将所有方法路由到另一个 JPanel

关于java - 如何在 CLONE JPanel 中使用 paint()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222914/

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