Я пытаюсь создать простое приложение, которое рисует графики ...изображения чертежа на компоненте Java
package Tests.Drawing;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.EtchedBorder;
public class DrawingTest extends JFrame
{
private Canvas drwArea;
private JButton btnClear;
public static void main(String[] args)
{
DrawingTest StartForm = new DrawingTest();
StartForm.setVisible(true);
}
public DrawingTest()
{
//Window...
this.setTitle("Drawing objects test00");
this.setBounds(0,0,510,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
//Drawing area...
drwArea = new Canvas();
drwArea.setBounds(0, 0, 400, 450);
drwArea.setBackground(Color.WHITE);
drwArea.setOpaque(true);
drwArea.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
drwArea.addMouseMotionListener(new MouseMotionAdapter()
{
@Override
public void mouseDragged(MouseEvent e)
{
//Write code to paint on the image...
}
});
this.getContentPane().add(drwArea);
//Clear button...
btnClear = new JButton("Clear");
btnClear.setBounds(410,50,70,30);
btnClear.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//Write code to clear the image...
}
});
this.getContentPane().add(btnClear);
}
private class Canvas extends JLabel
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//The idea of overriding this method is
//achieving persistence...
}
}
}
Я видел, что типичный компонент для рисования на это JLabel (Есть ли кто-нибудь лучше, путь?). Используя метод getGraphics, я могу использовать объект, который имеет несколько методов для рисования на компоненте. Моя проблема в том, что вместо рисования непосредственно на JLabel я хотел бы нарисовать изображение (в памяти), и как только картина закончится, отправьте результат в JLabel. Как я могу это сделать? Я немного потерял ...
Заранее спасибо.
Если у вас есть вопросы по поводу моего ответа, пожалуйста, спросите! –
'Я видел, что типичный компонент для рисования - это Jlabel' - вы не« рисуете »на JLabel (то есть вы не переопределяете paintComponent(), чтобы рисовать). Вы можете использовать JLabel для отображения ImageIcon. Если вы хотите нарисовать что-то, вы, как правило, либо нарисуете «JPanel», либо «BufferedImage». См. [Пользовательские подходы к рисованию] (https://tips4java.wordpress.com/2009/05/08/custom-painting-approaches/) для рабочих примеров обоих этих подходов. – camickr