Возможно, вы захотите создать подкласс JPanel
и реализовать свой собственный способ рисования компонентов, которые вы хотите нарисовать на панели.
Основной подход, вероятно, будет заключаться в том, чтобы присвоить MouseListener
подклассу JPanel
, а затем реализовать функцию рисования.
Основная идея может быть чем-то вроде:
class MyCanvas extends JPanel implements MouseListener
{
Image img; // Contains the image to draw on MyCanvas
public MyCanvas()
{
// Initialize img here.
this.addMouseListener(this);
}
public void paintComponent(Graphics g)
{
// Draws the image to the canvas
g.drawImage(img, 0, 0, null);
}
public void mouseClicked(MouseEvent e)
{
int x = e.getX();
int y = e.getY();
Graphics g = img.getGraphics();
g.fillOval(x, y, 3, 3);
g.dispose();
}
// ... other MouseListener methods ... //
}
Приведенный выше пример неполон (и не проверен - он определенно не будет компилироваться), но он дает представление о том, как реализовать класс MyCanvas
, в котором пользователь может щелкать и рисовать круги.
Объект img
используется для хранения изображения холста. Метод paintComponent
используется для рисования объекта img
на холсте. В методе mouseClicked
объект Graphics
, связанный с img
, извлекается для fillOval
на изображении.
Поскольку одним из требований является вставка изображений на холст, было бы неплохо иметь несколько Image
, которые вы хотите вставить на холст. Возможно, что-то вроде:
Image[] myImages; // Used to store images to paint to screen.
Затем в процедуре закрасить изображение на img
, хранящееся в MyCanvas
:
g.drawImage(myImage[INDEX_OF_DESIRED_IMAGE], 0, 0, null);
При использовании метода drawImage
объекта Graphics
другие Image
s могут быть нарисованы на Image
s.
Что касается вопроса о AWT и Swing, то да, это правда, что вы не хотите смешивать компоненты из AWT и Swing, так как они отличаются тем, как они отображают компоненты GUI. AWT основан на тяжеловесных компонентах, что означает, что они являются родными окнами для рисования графического интерфейса, в то время как Swing основан на облегченных компонентах, что означает, что GUI рисуется самой Java без использования собственных компонентов.
Хорошее руководство по различию AWT и Swing представлено в Живопись в AWT и Swing Статья от Sun.