在JavaSwing中单击并拖动“绘制电子元件”
我试图用Java设计一个OrCad,到目前为止,我决定用不同颜色的线条来表示每个组件。我通过绘制线条来测试我的代码,它工作了(单击并拖动,然后在绘制新线时重新绘制),但我不知道为什么它不再工作了,因为我正在尝试绘制我的组件,而不是简单的Line2D 我有一个类组件和几个基本派生组件,每个组件都有一个Line2D字段和一个Color字段。 绘图通过弹出菜单完成(用户右键单击以选择组件),然后当他们开始单击并拖动组件时,将创建组件对象并将其添加到始终重新绘制的阵列中 这是主要课程:在JavaSwing中单击并拖动“绘制电子元件”,java,swing,line,Java,Swing,Line,我试图用Java设计一个OrCad,到目前为止,我决定用不同颜色的线条来表示每个组件。我通过绘制线条来测试我的代码,它工作了(单击并拖动,然后在绘制新线时重新绘制),但我不知道为什么它不再工作了,因为我正在尝试绘制我的组件,而不是简单的Line2D 我有一个类组件和几个基本派生组件,每个组件都有一个Line2D字段和一个Color字段。 绘图通过弹出菜单完成(用户右键单击以选择组件),然后当他们开始单击并拖动组件时,将创建组件对象并将其添加到始终重新绘制的阵列中 这是主要课程: public c
public class Main {
private static String checked;
public static void main(String[] args)
{
createAndShowGUI();
}
private static void createAndShowGUI()
{
DrawingArea drawingArea = new DrawingArea();
PopUpMenu popup = new PopUpMenu();
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.getContentPane().add(drawingArea);
frame.getContentPane().add(popup);
frame.setSize(900, 500);
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
static class PopUpMenu extends JPanel {
public PopUpMenu()
{
setBackground(Color.BLACK);
JPopupMenu pmenu = new JPopupMenu();
JMenuItem resistance = new JMenuItem("Add Resitance");
JMenuItem wire = new JMenuItem("Add Wire");
JMenuItem capacitor = new JMenuItem("Add Capacitor");
JMenuItem source = new JMenuItem("Add Source");
pmenu.add(resistance);
pmenu.add(wire);
pmenu.add(capacitor);
pmenu.add(source);
resistance.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
checked = "R";
}
});
wire.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
checked = "W";
}
});
capacitor.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
checked = "C";
}
});
source.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
checked = "S";
}
});
addMouseListener( new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if(e.getButton() == MouseEvent.BUTTON3)
{
pmenu.show(e.getComponent(),e.getX(),e.getY());
}
}
});
}
}
}
公共类电容器扩展组件{
private double value;
private Line2D line;
private int ID;
private Color cul = Color.ORANGE;
private String type = "C";
public Capacitor(){
super();
}
@Override
public String getType() {
// TODO Auto-generated method stub
return type;
}
@Override
public Line2D getLine() {
// TODO Auto-generated method stub
return super.getLine();
}
@Override
public void setLine(Line2D line) {
// TODO Auto-generated method stub
super.setLine(line);
}
@Override
public int getID() {
// TODO Auto-generated method stub
return super.getID();
}
@Override
public void setID(int iD) {
// TODO Auto-generated method stub
super.setID(iD);
}
@Override
public Color getCul() {
// TODO Auto-generated method stub
return cul;
}
@Override
public int returnX1() {
// TODO Auto-generated method stub
return super.returnX1();
}
@Override
public int returnY1() {
// TODO Auto-generated method stub
return super.returnY1();
}
@Override
public int returnX2() {
// TODO Auto-generated method stub
return super.returnX2();
}
@Override
public int returnY2() {
// TODO Auto-generated method stub
return super.returnY2();
}
}
我觉得这与我在鼠标拖动和释放方法中复制行的方式有关。欢迎使用SO。
lines=new ArrayList()
我看不到你曾经向它添加过组件。组件的定义在哪里?发布代码时,我建议创建。我发现这是一种非常有用的技术。它不仅使帮助更容易,而且是一个强大的调试工具。在许多情况下,在准备一个组件时,你很可能会发现问题。谢谢,没想到,answ呃,这么快,我感谢你花时间回答。我在用户第一次单击鼠标拖动和绘制鼠标时添加了它们。R:public void mousePressed(MouseEvent e){startPoint=e.getPoint();switch(checked){case“W”:shape=new Wire();break;case“R”:shape=new Resistance();break;case“C”:shape=new capactor();break;case“S”:shape=new Source();break;}行。add(shape);}会使帮助变得更简单、更有效
public class Component {
protected double value;
protected Line2D line;
protected int ID;
protected Color cul;
protected String type;
public Component()
{
}
public String getType() {
return type;
}
public Line2D getLine() {
return line;
}
public void setLine(Line2D line) {
this.line = line;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public Color getCul() {
return cul;
}
public int returnX1() {
return (int)line.getP1().getX();
}
public int returnY1() {
return (int)line.getP1().getY();
}
public int returnX2() {
return (int)line.getP2().getX();
}
public int returnY2() {
return (int)line.getP2().getY();
}
private double value;
private Line2D line;
private int ID;
private Color cul = Color.ORANGE;
private String type = "C";
public Capacitor(){
super();
}
@Override
public String getType() {
// TODO Auto-generated method stub
return type;
}
@Override
public Line2D getLine() {
// TODO Auto-generated method stub
return super.getLine();
}
@Override
public void setLine(Line2D line) {
// TODO Auto-generated method stub
super.setLine(line);
}
@Override
public int getID() {
// TODO Auto-generated method stub
return super.getID();
}
@Override
public void setID(int iD) {
// TODO Auto-generated method stub
super.setID(iD);
}
@Override
public Color getCul() {
// TODO Auto-generated method stub
return cul;
}
@Override
public int returnX1() {
// TODO Auto-generated method stub
return super.returnX1();
}
@Override
public int returnY1() {
// TODO Auto-generated method stub
return super.returnY1();
}
@Override
public int returnX2() {
// TODO Auto-generated method stub
return super.returnX2();
}
@Override
public int returnY2() {
// TODO Auto-generated method stub
return super.returnY2();
}
}