Java绘图应用程序

Java绘图应用程序,java,swing,graphics2d,Java,Swing,Graphics2d,我需要开发一个应用程序,其中有3个按钮绘制一条直线,一个矩形和一个圆。应用程序的行为应该是这样的:用户单击按钮绘制所需形状,鼠标光标变为点,用户将鼠标向下移动到某个容器,在所需位置单击鼠标两次绘制两个点,然后使用这两个点绘制所需形状。根据我已经收集到的信息,我知道我应该使用MouseClickListener来绘制点,然后使用从点类传递的参数调用一个shape类来绘制形状。我需要知道的是用于形状的容器,将MouseClickListener放置在何处以便只允许在该容器中绘制,以及如何限制用户在再

我需要开发一个应用程序,其中有3个按钮绘制一条直线,一个矩形和一个圆。应用程序的行为应该是这样的:用户单击按钮绘制所需形状,鼠标光标变为点,用户将鼠标向下移动到某个容器,在所需位置单击鼠标两次绘制两个点,然后使用这两个点绘制所需形状。根据我已经收集到的信息,我知道我应该使用
MouseClickListener
来绘制点,然后使用从点类传递的参数调用一个shape类来绘制形状。我需要知道的是用于形状的容器,将
MouseClickListener
放置在何处以便只允许在该容器中绘制,以及如何限制用户在再次按下按钮之前绘制更多点。 到目前为止,这是我的代码: `公共类MyPanel{

private JFrame frame;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                MyPanel window = new MyPanel();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public MyPanel() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setResizable(false);
    frame.setBounds(100, 100, 500, 400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JPanel panel = new JPanel();
    panel.setBackground(Color.WHITE);
    panel.setBounds(10, 25, 474, 336);
    frame.getContentPane().add(panel);

    JButton btnLine = new JButton("Line");
    btnLine.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            drawPoint draw = new drawPoint();
        }
    });
    btnLine.setBounds(10, 0, 110, 23);
    frame.getContentPane().add(btnLine);

    JButton btnRectangle = new JButton("Rectangle");
    btnRectangle.setBounds(196, 0, 110, 23);
    frame.getContentPane().add(btnRectangle);

    JButton btnCircle = new JButton("Circle");
    btnCircle.setBounds(374, 0, 110, 23);
    frame.getContentPane().add(btnCircle);
 }
}
public class drawPoint implements MouseListener {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

}

@Override
public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub
    getCoordinates
    drawAPoint
    drawLine(coordinates)
}

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

 }

}
我需要知道的是形状要使用什么容器

通常,具有自定义绘图的组件是通过子类化
JPanel
并重写
paintComponent
方法来完成的。从OO的角度来看,不太习惯,而且可以说更干净,可以子类化
JComponent
。但是通过这种途径,您在web上会发现更少的示例代码

鼠标滑动器放在哪里

JPanel上
子类可能会起作用

以便仅允许在该容器中绘制

你不能真正阻止用户点击
JPanel
并拖出它。但是,你可以尝试检测这种情况,并确保代码忽略这种输入

以及如何限制用户在再次按下按钮之前绘制更多点


使用变量。例如,一个布尔变量
ready
最初为
true
,在绘图开始时设置为
false
,只需按下按钮即可重置为
true
。并让绘图点处理程序检查
ready
值,仅在
true
时启动绘图。您可能需要其他变量用于跟踪当前绘图操作中允许的额外单击次数。

请发布您自己创建的代码,并指出您的问题所在。到目前为止,您的问题读起来非常像“我有一个作业,请为我做”。如果您还没有任何代码,您可能希望查看Oracle提供的关于使用Swing构建图形应用程序的优秀教程(请参阅),“我不需要为自己完成工作,我需要指导原则(伪代码)。