回 帖 发 新 帖 刷新版面

主题:[讨论]请教关于Graphics类的程序!!

为什么这个程序画了直线后,那条直线不能马上显示,而要对窗口进行放大或缩小时才能看到?
还有如果要想多画几条直线,怎样才能保留原先画的直线?
请指教!!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class man extends JFrame
{
        int x1,y1,x2,y2;
        public man(String str)
        {
                    super(str);
        }
        public void put(man JF)
        {
                    Container contentPane=JF.getContentPane();
                    contentPane.addMouseListener(new MouseAdapter()
                    {
                             public void mousePressed(MouseEvent e) 
                             {
                                     x1=e.getX();
                                     y1=e.getY();
                              }
                              public void mouseReleased(MouseEvent e)
                              {
                                     x2=e.getX();
                                     y2=e.getY();
                               }
                    });
                    women JP=new women();
                    contentPane.add(JP);
                    JF.setSize(600,400);
                    JF.setLocation(180,180);
                    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    JF.setVisible(true);
           }  
           public static void main(String[] args)
           {
                     man JF=new man("菜单窗口");
                     JF.put(JF);
           }
           class women extends JPanel
           {
                    public void paintComponent(Graphics g)
                    {
                            super.paintComponent(g);
                            g.drawLine(x1,y1,x2,y2);
                    }
           }
}

回复列表 (共1个回复)

沙发

第一个问题不是很清楚.第二个问题:
请用JLabel和ImageIcon.
具体方法:
BufferedImage image = new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB);
ImageIcon icon = new ImageIcon(image);
JLabel label = new JLabel(icon);
之后在JPANEL中插入这个label.
当你需要在上面画东西的时候:
Graphics2D g = (Graphics2D) (image.getGraphics());
使用Graphics2D是因为这个类比Graphics类多提供些功能,而BufferedImage提供的是这个功能多些的画笔.
这样,你画在image上,label显示你画的image,就可以保留你画的线并且随便怎么画.

我来回复

您尚未登录,请登录后再回复。点此登录或注册