2016-02-03 3 views
-1

Я пытаюсь создать какую-то программу Paint. Я создал BufferedImage и Graphics2D, но я не могу его нарисовать. Все, что я вижу, это сам BufferedImage без каких-либо изменений.Как я могу нарисовать линию на BufferedImage?

public class paintapp implements ActionListener, MouseListener, MouseMotionListener 
{ 
public static final int WIDTHBUFF=300; 
public static final int HEIGHTBUFF=300; 
BufferedImage buffimage=new BufferedImage(WIDTHBUFF,HEIGHTBUFF,BufferedImage.TYPE_INT_BGR); 
JLabel imagelabel=new JLabel(new ImageIcon(buffimage)); 
int s=3; 
Color curr_color=Color.BLACK; 
int x,y; 
public static final int WIDTH=700; 
public static final int HEIGHT=700; 



public paintapp() 
{ 
    Graphics2D g2d=buffimage.createGraphics(); 
    g2d.setBackground(Color.WHITE); 
    g2d.fillRect(0, 0, WIDTHBUFF,HEIGHTBUFF); 
    JFrame frame=new JFrame("Painter"); 
    frame.setSize(WIDTH, HEIGHT); 
    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new BorderLayout()); 
    frame.setVisible(true); 
    Panel buttonpanel=new Panel(); 
    Panel colors=new Panel(); 
    Panel draw=new Panel(); 
    draw.add(imagelabel); 
    frame.add(draw); 
    frame.pack(); 



} 
public static void main(String[]args) 
{ 
    paintapp paint1=new paintapp(); 
} 
@Override 
public void mouseDragged(MouseEvent e) { 
    Graphics2D g2=buffimage.createGraphics(); 
    g2.setColor(curr_color); 
    g2.setStroke(new BasicStroke(s)); 
    g2.drawLine(x, y, e.getX(), e.getY()); 
    x=e.getX(); 
    y=e.getY(); 

} 
@Override 
public void mouseMoved(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void mouseClicked(MouseEvent e) { 
    x=e.getX(); 
    y=e.getY(); 

} 
@Override 
public void mouseEntered(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void mouseExited(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void mousePressed(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void mouseReleased(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

public void actionPerformed(ActionEvent e) { 

    // TODO Auto-generated method stub 

} 

}

+0

сначала приложите больше усилий для форматирования вашего кода;) –

ответ

0

Я вижу, вы роетесь и вы получили вещи в вперемешку порядке. Если вы прочтете руководства, вы увидите, как все будет.

Первым делом нужно добавить MouseMotionListener к объекту рисования - будь то JLabel JPanel.

Во-вторых, после того, как вы выйдете за пределы конструктора, JFrame будет потерян (если вы не сделаете какие-нибудь причудливые вещи), и не можете получить доступ к обновлению, поэтому система решает, когда обновляться, и вы увидите - после вас добавьте слушателя мыши - чтобы ваш рисунок появлялся после скрытия и снова показывал окно чертежа.

Итак, у вас должен быть JFrame как глобальный - почему у вас нет класса, расширяющего JFrame, и поэтому вам не нужно иметь дополнительный JFrame.

Смежные вопросы