Как да направя размера на четката по-голям в Java?

+7 гласа
294 прегледа
попитан 2016 май 20 от Bogdan Ganev (260 точки)
Направих една програма за рисуване, но единственото не намирам как се прави, дори и във други форуми, е как се увеличава размера на четката, с която се рисува. Ето кода от първия клас:

package MaddpawNightpainter;
 
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
 
import javax.swing.JComponent;

public class Nightpainter extends JComponent {
 
  // Image in which we're going to draw
  private Image image;
  // Graphics2D object ==> used to draw on
  private Graphics2D g2;
  // Mouse coordinates
  private int currentX, currentY, oldX, oldY;
 
  public Nightpainter() {
    setDoubleBuffered(false);
    addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        // save coord x,y when mouse is pressed
        oldX = e.getX();
        oldY = e.getY();
      }
    });
 
    addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseDragged(MouseEvent e) {
        // coord x,y when drag mouse
        currentX = e.getX();
        currentY = e.getY();
 
        if (g2 != null) {
          // draw line if g2 context not null
          g2.drawLine(oldX, oldY, currentX, currentY);
          // refresh draw area to repaint
          repaint();
          // store current coords x,y as olds x,y
          oldX = currentX;
          oldY = currentY;
        }
      }
    });
  }
 
  protected void paintComponent(Graphics g) {
    if (image == null) {
      // image to draw null ==> we create
      image = createImage(getSize().width, getSize().height);
      g2 = (Graphics2D) image.getGraphics();
      // enable antialiasing
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      // clear draw area
      clear();
    }
 
    g.drawImage(image, 0, 0, null);
  }
 
  // now we create exposed methods
  public void clear() {
    g2.setPaint(Color.white);
    // draw white on entire draw area to clear
    g2.fillRect(0, 0, getSize().width, getSize().height);
    g2.setPaint(Color.black);
    repaint();
  }
 
  public void red() {
    // apply red color on g2 context
    g2.setPaint(Color.red);
  }
 
  public void black() {
    g2.setPaint(Color.black);
  }
 
  public void magenta() {
    g2.setPaint(Color.magenta);
  }
 
  public void green() {
    g2.setPaint(Color.green);
  }
 
  public void blue() {
    g2.setPaint(Color.blue);
  }
  public void yellow() {
    g2.setPaint(Color.yellow);
  }
  public void orange() {
    g2.setPaint(new Color(255,127,39));
  }
}

И ето го и втория клас

package MaddpawNightpainter;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Nightpainter2 {

  static JButton clearBtn, blackBtn, blueBtn, greenBtn, redBtn, magentaBtn, yellowBtn, orangeBtn;
  static Nightpainter drawArea;
  static ActionListener actionListener = new ActionListener() {

  public void actionPerformed(ActionEvent e) {
      if (e.getSource() == clearBtn) {
        drawArea.clear();
      } else if (e.getSource() == blackBtn) {
        drawArea.black();
      } else if (e.getSource() == blueBtn) {
        drawArea.blue();
      } else if (e.getSource() == greenBtn) {
        drawArea.green();
      } else if (e.getSource() == redBtn) {
        drawArea.red();
      } else if (e.getSource() == magentaBtn) {
        drawArea.magenta();
      } else if (e.getSource() == yellowBtn) {
        drawArea.yellow();
      } else if (e.getSource() == orangeBtn) {
        drawArea.orange();
      } else if (e.getSource() == saveAsBtn) {
        export();
      }
      
    }
  };

  public static void main(String[] args) {
    // create main frame
        JFrame frame = new JFrame("Nightpainter 1.0");
        // set layout on content pane
        frame.setLayout(new BorderLayout());
        // create draw area
        drawArea = new Nightpainter();

        // add to content pane
        frame.add(drawArea, BorderLayout.CENTER);

        // create controls to apply colors and call clear feature
        JPanel controls = new JPanel();

        clearBtn = new JButton("Clear");
        clearBtn.addActionListener(actionListener);
        blackBtn = new JButton("Black");
        blackBtn.addActionListener(actionListener);
        blueBtn = new JButton("Blue");
        blueBtn.addActionListener(actionListener);
        greenBtn = new JButton("Green");
        greenBtn.addActionListener(actionListener);
        redBtn = new JButton("Red");
        redBtn.addActionListener(actionListener);
        magentaBtn = new JButton("Magenta");
        magentaBtn.addActionListener(actionListener);
        yellowBtn = new JButton("Yellow");
        yellowBtn.addActionListener(actionListener);
        orangeBtn = new JButton("Orange");
        orangeBtn.addActionListener(actionListener);
        saveAsBtn = new JButton("Save as");
        saveAsBtn.addActionListener(actionListener);
        
        // add to panel
        controls.add(greenBtn);
        controls.add(blueBtn);
        controls.add(blackBtn);
        controls.add(redBtn);
        controls.add(magentaBtn);
        controls.add(yellowBtn);
        controls.add(orangeBtn);
        controls.add(clearBtn);
  
        // add to content pane
        frame.add(controls, BorderLayout.NORTH);

        frame.setSize(850, 850);
        // can close frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // show the swing paint result
        frame.setVisible(true);     
  }

Въпроса ми е какъв е кода за направата на увеличаването на четката като във Microsoft Paint?

1 отговор

0 гласа
отговорени 2016 май 27 от Daniel Ivanov (11,160 точки)

Ползвай setStroke за да настроиш размера на Graphics2D обекта

Забележи, че setStroke метода не е достъпен в Graphics обекта. Трябва да го cast-неш към Graphics2D обект.

Има примери тук:

http://www.java2s.com

import java.awt.*;

import java.awt.geom.Line2D;

import javax.swing.*;

public class FrameTest {

    public static void main(String[] args) {

        JFrame jf = new JFrame("Demo");

        Container cp = jf.getContentPane();

        cp.add(new JComponent() {

            public void paintComponent(Graphics g) {

                Graphics2D g2 = (Graphics2D) g;

                g2.setStroke(new BasicStroke(10));

                g2.draw(new Line2D.Float(30, 20, 80, 90));

            }

        });

        jf.setSize(300, 200);

        jf.setVisible(true);

    }

}

Този код представлява това нещо:

http://postimg.org/image/yda3cpfcr/

...