これが私がやった方法です。この初心者用コードを改善する方法を教えてください! ;)
基本的に、長方形を描画するボタンを取得するためのトリックは次のとおりです。
メイン アプリ クラスを JFrame (または JComponent) または ??? に拡張します。
メイン アプリの一番上で、描画するクラス (DrawCanvas) を宣言し、JPanel に拡張します。
メイン アプリ クラスの一番上で、描画するものを保持する ArrayList を宣言しました。
メイン アプリ クラスの一番上で描画クラスの変数を宣言します。
コントロールイベント(私の場合はボタン)で、関数を使用して描画するものを準備します(私は AddRectangle() と呼ばれるものを使用しました)。
描画クラスで、paintComponent をオーバーライドし、for each を使用して、配列内で追い払ったすべてのものを描画します。
描画を直接制御することはできないため、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);
}
}