Графика и графика 2D в Java - PullRequest
       130

Графика и графика 2D в Java

0 голосов
/ 29 октября 2019

У меня проблема с изменением цвета бриллианта, который я создал, когда использую методы в Java. Я не знаю, как наследовать или исправить это с помощью методов. Я просто хочу, чтобы он стал объектно-ориентированным, я не знаю, как правильно это сделать. Пожалуйста, помогите мне.

package Trial;

import javax.swing.*;
import java.awt.*;

public class ColorRed extends JApplet {
    public GradientPaint gradientPaint;
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        GradientPaint black = new GradientPaint(50,20,Color.BLACK,50,50,Color.BLACK);
        blackDiamond(g2,black);
        GradientPaint yellowOrange = new GradientPaint(50,20,Color.YELLOW,50,50,Color.RED);
        redDiamond(g2,yellowOrange);

    }

    public void blackDiamond(Graphics2D g2,GradientPaint gradientPaint){
        int a [] = {100,50,100,150,100};
        int b [] = {10,60,110,60,10};
        setGradientPaint(gradientPaint);
        g2.setPaint(getGradientPaint());
        fillPolygon(a,b,5,g2);
    }
    public void redDiamond(Graphics2D g2,GradientPaint gradientPaint){
        int a2 [] = {100,60,100,140,100};
        int b2 [] = {20,60,100,60,20};
        setGradientPaint(gradientPaint);
        g2.setPaint(getGradientPaint());
        fillPolygon(a2,b2,5,g2);
    }

    public void fillPolygon(int a [], int b [] ,int c,Graphics2D g2){

        getGraphics().fillPolygon(a,b,c);
    }

    public GradientPaint getGradientPaint() {
        return gradientPaint;
    }

    public void setGradientPaint(GradientPaint gradientPaint) {
        this.gradientPaint = gradientPaint;
    }
}

Это код, который я пытаюсь создать объектно-ориентированным, но он не наследует цвет градиентной краски.

введите описание изображения здесь

Это результат моего кода

Это код, который еще не создает несколько методов

import javax.swing.*;
import java.awt.*;

public class ColorRed extends JApplet {
    public GradientPaint gradientPaint;
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        int a [] = {100,50,100,150,100};
        int b [] = {10,60,110,60,10};
        g.fillPolygon(a,b,5);
        GradientPaint red = new GradientPaint(50,10,Color.RED,10,70,Color.ORANGE);
        g2.setPaint(red);
        int a2 [] = {100,60,100,140,100};
        int b2 [] = {20,60,100,60,20};
        g.fillPolygon(a2,b2,5);

    }
}

Это результат, который я хочу: введите описание изображения здесь

Я просто хочу исправить это так, чтобы я не объявлял все локальные переменные в методе рисования. Я просто хочу разделить его различными методами, проблема в том, что Colorне меняется. Пожалуйста, помогите мне большое спасибо. :)

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Я изменил Ответ сумматора (который работал как рекламируется), чтобы он работал без использования JApplet (который также помечен как устаревший). Я добавил несколько комментариев, где они разные.


    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;

    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;

    public class ColorRed extends JPanel {
       private GradientPaint black;
       private GradientPaint yellowOrange;

       JFrame                frame = new JFrame();

       public static void main(String[] args) {
          SwingUtilities.invokeLater(() -> new ColorRed().init());
       }

       public void init() {

          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          // set the panel size
          setPreferredSize(new Dimension(500, 500));
          // add panel to frame.
          frame.add(this);
          // adjust frame and subcomponents
          frame.pack();
          // center on screen
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
          setBlack(new GradientPaint(50, 20, Color.BLACK, 50, 50, Color.BLACK));
          setYellowOrange(new GradientPaint(50, 20, Color.YELLOW, 50, 50, Color.RED));
       }

       public void setBlack(GradientPaint black) {
          this.black = black;
       }

       public void setYellowOrange(GradientPaint yellowOrange) {
          this.yellowOrange = yellowOrange;
       }
       // use paintComponent(g) and not  paint(g)
       public void paintComponent(Graphics g) {
          super.paintComponent(g);
          Graphics2D g2 = (Graphics2D) g;
          blackDiamond(g2, black);
          redDiamond(g2, yellowOrange);
       }

       public void blackDiamond(Graphics2D g2, GradientPaint gradientPaint) {
          int a[] = { 100, 50, 100, 150, 100
          };
          int b[] = { 10, 60, 110, 60, 10
          };
          g2.setPaint(gradientPaint);
          fillPolygon(a, b, 5, g2);
       }
       public void redDiamond(Graphics2D g2, GradientPaint gradientPaint) {
          int a2[] = { 100, 60, 100, 140, 100
          };
          int b2[] = { 20, 60, 100, 60, 20
          };
          g2.setPaint(gradientPaint);
          fillPolygon(a2, b2, 5, g2);
       }

       public void fillPolygon(int a[], int b[], int c, Graphics2D g2) {

          g2.fillPolygon(a, b, c);
       }
    }


0 голосов
/ 29 октября 2019

Может быть, организовать это так, чтобы цвет можно было легко изменить:

package Trial;

import javax.swing.*;
import java.awt.*;

public class ColorRed extends JApplet {
    private GradientPaint black;    
    private GradientPaint yellowOrange; 

    public void init() {
        setBlack(new GradientPaint(50,20,Color.BLACK,50,50,Color.BLACK));
        setYellowOrange(GradientPaint(50,20,Color.YELLOW,50,50,Color.RED));
    }

    public setBlack(GradientPaint black) {
        this.black = black;
    }

    public setYellowOrange(GradientPaint yellowOrange) {
        this.yellowOrange = yellowOrange;
    }

    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        blackDiamond(g2,black);
        redDiamond(g2,yellowOrange);
    }

    public void blackDiamond(Graphics2D g2,GradientPaint gradientPaint){
        int a [] = {100,50,100,150,100};
        int b [] = {10,60,110,60,10};
        g2.setPaint(gradientPaint);
        fillPolygon(a,b,5,g2);
    }
    public void redDiamond(Graphics2D g2,GradientPaint gradientPaint){
        int a2 [] = {100,60,100,140,100};
        int b2 [] = {20,60,100,60,20};
        g2.setPaint(gradientPaint);
        fillPolygon(a2,b2,5,g2);
    }

    public void fillPolygon(int a [], int b [] ,int c,Graphics2D g2){

        g2.fillPolygon(a,b,c);
    }
}

К сожалению, я не нашел онлайн-бегуна, чтобы протестировать его.

...