绘制图形对象
Drawing a graphical object
我想在 JFrame 中画一些东西,所以我决定使用下面的代码,虽然它确实有效,但我不想有任何 ActionListener。
public class Draw
{
public static void main(String[] args)
{
final JPanel jPanel = new JPanel();
JFrame jFrame = new JFrame("Drawing Window");
JButton jButton = new JButton("draw");
jPanel.add(jButton);
jFrame.add(jPanel);
jFrame.setBounds(0, 0, 500, 500);
// first place
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// second place
jButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Graphics graphics = jPanel.getGraphics();
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);
}
});
}
}
如您所见,我在 ActionPerfomed 方法中添加了以下代码:
Graphics graphics = jPanel.getGraphics();
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);
现在我想把它放在第一个位置(代码中的注释位置)但是我会得到一个错误,如果我把它放在第二个位置,我不会得到任何错误但是它不绘制任何事情。
好像有必要把绘图方法放在actionPerformed里面,我的问题是为什么?还有其他方法吗?
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);
这些语句需要移动到 jPanel
的重写 paintComponent(Graphics)
方法。
面板的getPreferredSize()
方法也应该重写为return尺寸为500x500,然后,而不是:
jFrame.setBounds(0, 0, 500, 500);
只需致电:
jFrame.pack();
您的另一个选择是制作方法(paintComponent 或 paint):
public void paintComponent(Graphics graphics){
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);
}
并从 actionListener 调用 repaint,如图所示。
public void actionPerformed(ActionEvent action){
repaint();
}
如果对你有用,你可以随意改造....
我想在 JFrame 中画一些东西,所以我决定使用下面的代码,虽然它确实有效,但我不想有任何 ActionListener。
public class Draw
{
public static void main(String[] args)
{
final JPanel jPanel = new JPanel();
JFrame jFrame = new JFrame("Drawing Window");
JButton jButton = new JButton("draw");
jPanel.add(jButton);
jFrame.add(jPanel);
jFrame.setBounds(0, 0, 500, 500);
// first place
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// second place
jButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Graphics graphics = jPanel.getGraphics();
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);
}
});
}
}
如您所见,我在 ActionPerfomed 方法中添加了以下代码:
Graphics graphics = jPanel.getGraphics();
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);
现在我想把它放在第一个位置(代码中的注释位置)但是我会得到一个错误,如果我把它放在第二个位置,我不会得到任何错误但是它不绘制任何事情。
好像有必要把绘图方法放在actionPerformed里面,我的问题是为什么?还有其他方法吗?
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);
这些语句需要移动到 jPanel
的重写 paintComponent(Graphics)
方法。
面板的getPreferredSize()
方法也应该重写为return尺寸为500x500,然后,而不是:
jFrame.setBounds(0, 0, 500, 500);
只需致电:
jFrame.pack();
您的另一个选择是制作方法(paintComponent 或 paint):
public void paintComponent(Graphics graphics){
graphics.drawLine(0,0,100,100);
graphics.drawOval(0,0,100,100);
}
并从 actionListener 调用 repaint,如图所示。
public void actionPerformed(ActionEvent action){
repaint();
}
如果对你有用,你可以随意改造....