【问题标题】:Java drawing applicationJava绘图应用程序
【发布时间】:2015-04-01 15:44:01
【问题描述】:

我需要开发一个应用程序,它有 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

 }

}

【问题讨论】:

标签: java swing graphics2d


【解决方案1】:

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

通常,具有自定义绘制功能的组件是通过继承 JPanel 并覆盖 paintComponent 方法来完成的。从面向对象的角度来看,不太习惯,并且可以说更干净,可以继承JComponent。但是通过这条路线,您会在网络上找到更少的示例代码。

MouseClickListener 的放置位置

JPanel 子类可能会起作用。

为了只允许在该容器中绘图

您无法真正阻止用户单击JPanel 并将其拖出。但是,您可以尝试检测这种情况,并确保代码忽略这种输入。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多