Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaSwing中单击并拖动“绘制电子元件”_Java_Swing_Line - Fatal编程技术网

在JavaSwing中单击并拖动“绘制电子元件”

在JavaSwing中单击并拖动“绘制电子元件”,java,swing,line,Java,Swing,Line,我试图用Java设计一个OrCad,到目前为止,我决定用不同颜色的线条来表示每个组件。我通过绘制线条来测试我的代码,它工作了(单击并拖动,然后在绘制新线时重新绘制),但我不知道为什么它不再工作了,因为我正在尝试绘制我的组件,而不是简单的Line2D 我有一个类组件和几个基本派生组件,每个组件都有一个Line2D字段和一个Color字段。 绘图通过弹出菜单完成(用户右键单击以选择组件),然后当他们开始单击并拖动组件时,将创建组件对象并将其添加到始终重新绘制的阵列中 这是主要课程: public c

我试图用Java设计一个OrCad,到目前为止,我决定用不同颜色的线条来表示每个组件。我通过绘制线条来测试我的代码,它工作了(单击并拖动,然后在绘制新线时重新绘制),但我不知道为什么它不再工作了,因为我正在尝试绘制我的组件,而不是简单的Line2D

我有一个类组件和几个基本派生组件,每个组件都有一个Line2D字段和一个Color字段。 绘图通过弹出菜单完成(用户右键单击以选择组件),然后当他们开始单击并拖动组件时,将创建组件对象并将其添加到始终重新绘制的阵列中

这是主要课程:

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();
}
}