Java绘图应用程序

时间:2015-04-01 07:21:46

标签: java swing graphics2d

我需要开发一个应用程序,它有3个按钮,用于绘制直线,矩形和圆形。应用程序的行为应如下所示:用户单击按钮以绘制所需形状,鼠标光标变为点,用户将鼠标向下移动到某个容器,通过在所需位置单击鼠标两次绘制两个点,然后绘制所需形状用这两个点绘制。从我已经收集到的信息中,我知道我应该使用MouseClickListener来绘制点,然后使用从点类传递的参数调用形状类来绘制形状。我需要知道的是用于形状的容器,放置MouseClickListener的位置,以便仅允许在该容器中绘制,以及如何限制用户再次绘制按钮,直到再次按下按钮。 到目前为止这是我的代码: `public class 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

 }

}

1 个答案:

答案 0 :(得分:1)

  

我需要知道的是用于形状的容器

通常,具有自定义绘制的组件是通过继承JPanel并覆盖paintComponent方法完成的。从OO的角度来看,较不习惯,可以说更干净,可以将JComponent作为子类。但是,通过这条路线,您可以在网上找到更少的示例代码。

  

将MouseClickListener放在哪里

JPanel子类上可能会有效。

  

以便只允许在该容器中绘图

您无法真正阻止用户点击JPanel并在其外部拖动。但是,您可以尝试检测此情况,并确保代码忽略此类输入。

  

以及如何限制用户在再次按下按钮之前不再绘制任何点。

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