2014-08-31 12 views
-1

누군가가 옆에있는 jpanel에서 버튼 클릭으로 사각형을 그리는 Java UI의 기본 예제를 제공 할 수 있습니까?자바 -> 기본 그리기 -> Howto -> 버튼 클릭으로 jpanel에 도형을 추가합니다.

마우스가 캡처 된 그림이나 UI가로드되지 않는 그림이 있지만 다른 구성 요소에서 그리는 데 사용되는 한 구성 요소의 예는 찾을 수 없습니다.

사용자가 상자 (행 및 열)의 수를 정의하고 ok 단추가 종이 상자를 시뮬레이트 한 JPanel에이 상자를 그려야하는 UI가 있습니다.

감사합니다. 도움을 주셔서 감사합니다.

+1

이 질문은 코드 예제를 얻기에 관하여 있기 때문에 주제에서 벗어난 것으로 보인다. –

답변

0

구성 요소에 무언가를 그려야하는 경우 paintComponent-Method를 덮어 씁니다.

기본 의사 예를 들어, 사용 인 JPanel :

public class MyPanel extends JPanel 
{ 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     //here your draw stuff 
     //like: 
     Graphics2D g2d = (Graphics2D)g; 
     g.drawLine(...); 
    } 
} 
+0

응답 해 주셔서 감사합니다. 필자가 쓴 것처럼, 컴포넌트에서 컴포넌트를 그리려하지 않을 것이다. 다른 구성 요소의 클릭 동작에서 구성 요소를 그려보고 있습니다. 어떻게하는지 알겠습니까? 다시 한번 감사드립니다. – InnerOrchestra

+0

예, 당신이하고 싶은 것을 압니다. 그러나 이것이 가능하지 않다는 것을 IM은 두려워합니다.단추를 클릭하면이 단추는 사용자 지정 패널에서 셰이프 목록을 그릴 수있는 사용자 지정 셰이프 개체를 만들 수 있습니다.이 목록에는 모든 셰이프가 포함됩니다. 사용자 정의 패널은 paintComponent의이 목록에있는 모든 도형을 칠합니다. – Ben

0

여기 어떻게 내가 해냈어. 이 초보자 용 코드를 어떻게 향상 시킬지 알려주십시오. ;) 기본적으로 여기

'버튼이 사각형을 그릴 얻을 수있는 트릭 :

  • 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); 
} 

}