-1

ボタンをクリックすると、隣のjpanelに長方形が描画されるJava uiの基本的な例を誰かが提供できますか?

マウスがキャプチャされた場所での描画や、UI の読み込みによる静的な描画の例は見つかりましたが、別のコンポーネントを描画するために使用 (クリック) されたコンポーネントの例は見つかりませんでした。

ユーザーがボックス (行と列) の数を定義する UI があり、[OK] ボタンは、紙をシミュレートした JPanel にこれらのボックスを描画する必要があります。

ご協力いただきありがとうございます。

4

2 に答える 2

0

これが私がやった方法です。この初心者用コードを改善する方法を教えてください! ;)

基本的に、長方形を描画するボタンを取得するためのトリックは次のとおりです。

  • メイン アプリ クラスを 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);
}

}

于 2014-09-09T17:00:02.190 に答える
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(...);
   }
}
于 2014-08-31T21:12:49.223 に答える