여기 어떻게 내가 해냈어. 이 초보자 용 코드를 어떻게 향상 시킬지 알려주십시오. ;) 기본적으로 여기
'버튼이 사각형을 그릴 얻을 수있는 트릭 :
JFrame의 (또는 JComponent에) 또는 당신의 주요 애플 리케이션 클래스를 확장 ???
드로잉 (DrawCanvas) 할 클래스의 상단에서 오른쪽을 선언하고 JPanel까지 확장하십시오.
메인 앱 클래스의 맨 위에는 그릴 물건을 담기위한 ArrayList가 선언되었습니다.
드로잉 클래스의 변수를 기본 앱 클래스의 맨 위에 선언하십시오.
컨트롤 이벤트 (내 경우에는 버튼)에서 함수를 사용하여 그릴 준비를합니다 (AddRectangle()).
드로잉 클래스에서 paintComponent를 재정의하고 각각에 대해 a를 사용하여 배열에서 멀리 떨어진 모든 것을 그릴 수 있습니다.
그리기를 직접 제어 할 수 없으므로 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);
}
}
이 질문은 코드 예제를 얻기에 관하여 있기 때문에 주제에서 벗어난 것으로 보인다. –