Вот как я это сделал. Пожалуйста, дайте мне знать, как вы улучшите этот код для начинающих! ;)
По сути, вот трюк, чтобы получить кнопку, чтобы нарисовать прямоугольник:
Расширьте свой главный класс приложения к JFrame (или JComponent) или ???
Объявление в верхней части основного приложения вашего класса для рисования (DrawCanvas) и расширение до JPanel.
Справа вверху вашего основного класса приложения объявлен массив ArrayList, чтобы держать вещи, которые вы рисуете.
Объявление переменной для класса чертежа в верхней части основного класса приложения.
В вашем контрольном событии (кнопка в моем случае) используйте функцию, чтобы подготовить материал для рисования (я использовал один из них - AddRectangle()).
В вашем классе рисования переопределите компонент paintComponent и используйте для каждого, чтобы нарисовать все материалы, которые вы прокрутили в своем массиве.
Поскольку вы не можете напрямую контролировать чертеж, вы должны понимать, что каждый раз, когда repaint() получает вызов, будет вызываться функция рисования. Это означает, что вам нужно отбросить все ваши вещи, как кровавую белку, чтобы метод рисования правильно рисовал или перерисовывал экран. В конце концов, это, как правило, куча массивов, которые вы в конечном итоге используете и кучу для каждый цикл проходит через них.
package views;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.*;
public class appMainWindow extends JFrame
{
class PdfLocation
{
public double xPos;
public double yPos;
}
class DrawCanvas extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
for (PdfLocation p : PdfLocations)
{
g.drawRect((int)p.xPos, (int)p.yPos, 35, 20);
repaint();
}
}
}
public void AddRectangle()
{
PdfImagesCount++;
lblPdfcount.setText(Integer.toString(PdfImagesCount));
PdfLocation rect = new PdfLocation();
if (PdfLocations.isEmpty() == false)
{
PdfLocation spot = PdfLocations.get(PdfLocations.size() - 1);
rect.xPos = spot.xPos + 45;
rect.yPos = 10;
}
else
{
rect.xPos = 10;
rect.yPos = 10;
}
PdfLocations.add(rect);
}
private JFrame frame;
public ArrayList<PdfLocation> PdfLocations = new ArrayList<PdfLocation>();
public int PdfImagesCount = 0;
public static final int CANVAS_HEIGHT = 700;
public static final int CANVAS_WIDTH = 1000;
private DrawCanvas canvas;
private JLabel lblPdfcount;
public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { appMainWindow window = new appMainWindow(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); }
public appMainWindow()
{
// Set up a custom drawing JPanel
canvas = new DrawCanvas();
canvas.setBackground(Color.WHITE);
canvas.setBounds(150, 25, CANVAS_WIDTH, CANVAS_HEIGHT);
initialize();
}
private void initialize()
{
frame = new JFrame();
frame.setBounds(100, 100, 1280, 850);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JButton btnAddARectangle = new JButton("Add a rectangle");
btnAddARectangle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{
AddRectangle();
repaint();
}
});
btnAddARectangle.setBounds(0, 6, 151, 29);
frame.getContentPane().add(btnAddARectangle);
frame.getContentPane().add(canvas);
lblPdfcount = new JLabel("PdfCount");
lblPdfcount.setBounds(10, 43, 61, 16);
frame.getContentPane().add(lblPdfcount);
}
}
Этот вопрос, как представляется, не по теме, потому что речь идет о получении примеров кода. –