Java绘图应用
Java drawing application
我需要开发一个应用程序,它有 3 个用于绘制直线、矩形和圆形的按钮。应用程序应如下所示:用户单击按钮绘制所需形状,鼠标光标变为点,用户将鼠标向下移动到某个容器,通过在所需位置单击鼠标两次然后绘制所需形状来绘制两个点使用这两个点绘制。根据我已经收集到的信息,我知道我应该使用 MouseClickListener
来绘制点,然后使用从点 class 传递的参数调用形状 class 来绘制形状。我需要知道的是形状要使用哪个容器,将 MouseClickListener
放在哪里以便只允许在该容器中绘图,以及如何限制用户在再次按下按钮之前不能再绘制任何点。
到目前为止,这是我的代码:
`public class 我的面板 {
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
}
}
What I need to know is what container to use for the shapes
通常,具有自定义绘制的组件是通过继承 JPanel
并重写 paintComponent
方法来完成的。从 OO 的角度来看,不太习惯,而且可以说更干净,可以子类化 JComponent
。但是通过这种方式,您会在 Web 上找到更少的示例代码。
where to put the MouseClickListener
在 JPanel
子类上可能会起作用。
in order to allow drawing only in that container
您无法真正阻止用户在 JPanel
中单击并拖出它。但是,您可以尝试检测这种情况,并确保代码忽略这种输入。
and how to restrict the user from drawing any more points until a button is pressed again.
使用变量。例如,最初为 true
的布尔变量 ready
在绘图开始时设置为 false
,并且仅通过按下按钮重置为 true
。并让您的绘图点处理程序检查 ready
值,并且仅在 true
时才启动绘图。您可能需要其他变量来跟踪作为当前绘图操作的一部分允许的额外点击次数。
我需要开发一个应用程序,它有 3 个用于绘制直线、矩形和圆形的按钮。应用程序应如下所示:用户单击按钮绘制所需形状,鼠标光标变为点,用户将鼠标向下移动到某个容器,通过在所需位置单击鼠标两次然后绘制所需形状来绘制两个点使用这两个点绘制。根据我已经收集到的信息,我知道我应该使用 MouseClickListener
来绘制点,然后使用从点 class 传递的参数调用形状 class 来绘制形状。我需要知道的是形状要使用哪个容器,将 MouseClickListener
放在哪里以便只允许在该容器中绘图,以及如何限制用户在再次按下按钮之前不能再绘制任何点。
到目前为止,这是我的代码:
`public class 我的面板 {
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
}
}
What I need to know is what container to use for the shapes
通常,具有自定义绘制的组件是通过继承 JPanel
并重写 paintComponent
方法来完成的。从 OO 的角度来看,不太习惯,而且可以说更干净,可以子类化 JComponent
。但是通过这种方式,您会在 Web 上找到更少的示例代码。
where to put the MouseClickListener
在 JPanel
子类上可能会起作用。
in order to allow drawing only in that container
您无法真正阻止用户在 JPanel
中单击并拖出它。但是,您可以尝试检测这种情况,并确保代码忽略这种输入。
and how to restrict the user from drawing any more points until a button is pressed again.
使用变量。例如,最初为 true
的布尔变量 ready
在绘图开始时设置为 false
,并且仅通过按下按钮重置为 true
。并让您的绘图点处理程序检查 ready
值,并且仅在 true
时才启动绘图。您可能需要其他变量来跟踪作为当前绘图操作的一部分允许的额外点击次数。