Java Tutorial/2D Graphics/Gradient Paint
Содержание
- 1 Acyclic Gradient Paint
- 2 A non-cyclic gradient
- 3 Control the direction of Gradients
- 4 Cyclic Gradient Paint
- 5 Drawing with a Gradient Color
- 6 Gradients: a smooth blending of shades from light to dark or from one color to another
- 7 Gradients in the middle
- 8 Horizontal Gradients
- 9 String gradient paint
- 10 Vertical Gradient Paint
Acyclic Gradient Paint
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import javax.swing.JComponent; import javax.swing.JFrame; class GradientPane extends JComponent {
public void paint(Graphics g) { Graphics2D g2D = (Graphics2D) g; Point2D.Float p1 = new Point2D.Float(150.f, 75.f); // Gradient line start Point2D.Float p2 = new Point2D.Float(250.f, 75.f); // Gradient line end float width = 300; float height = 50; Rectangle2D.Float rect1 = new Rectangle2D.Float(p1.x - 100, p1.y - 25, width, height); GradientPaint g2 = new GradientPaint(p1, Color.WHITE, p2, Color.DARK_GRAY, false); // Acyclic // gradient rect1.setRect(p1.x - 100, p1.y - 25, width, height); g2D.setPaint(g2); // Gradient color fill g2D.fill(rect1); // Fill the rectangle g2D.setPaint(Color.BLACK); // Outline in black g2D.draw(rect1); // Fill the rectangle g2D.draw(new Line2D.Float(p1, p2)); }
} public class AcyclicGradientPaint {
public static void main(String[] a) { JFrame window = new JFrame("Acyclic Gradient Paint"); window.setBounds(30, 30, 300, 300); window.getContentPane().add(new GradientPane()); window.setVisible(true); }
}</source>
A non-cyclic gradient
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import javax.swing.JComponent; import javax.swing.JFrame; public class BasicDraw {
public static void main(String[] args) { new BasicDraw(); } BasicDraw() { JFrame frame = new JFrame(); frame.add(new MyComponent()); frame.setSize(300, 300); frame.setVisible(true); }
} class MyComponent extends JComponent {
public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Color startColor = Color.red; Color endColor = Color.blue; int startX = 10, startY = 20, endX = 30, endY = 40; GradientPaint gradient = new GradientPaint(startX, startY, startColor, endX, endY, endColor); g2d.setPaint(gradient); g2d.draw(new Rectangle(20,20,200,200)); }
}</source>
Control the direction of Gradients
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; public class GradientsDirection extends JPanel {
public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; GradientPaint gp1 = new GradientPaint(5, 25, Color.yellow, 20, 2, Color.black, true); g2d.setPaint(gp1); g2d.fillRect(20, 80, 300, 40); } public static void main(String[] args) { JFrame frame = new JFrame("GradientsDirection"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new GradientsDirection()); frame.setSize(350, 350); frame.setLocationRelativeTo(null); frame.setVisible(true); }
}</source>
Cyclic Gradient Paint
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import javax.swing.JComponent; import javax.swing.JFrame; class GradientPane extends JComponent {
public void paint(Graphics g) { Graphics2D g2D = (Graphics2D) g; Point2D.Float p1 = new Point2D.Float(150.f, 75.f); // Gradient line start Point2D.Float p2 = new Point2D.Float(250.f, 75.f); // Gradient line end float width = 300; float height = 50; GradientPaint g1 = new GradientPaint(p1, Color.WHITE, p2, Color.DARK_GRAY, true); // Cyclic // gradient Rectangle2D.Float rect1 = new Rectangle2D.Float(p1.x - 100, p1.y - 25, width, height); g2D.setPaint(g1); // Gradient color fill g2D.fill(rect1); // Fill the rectangle g2D.setPaint(Color.BLACK); // Outline in black g2D.draw(rect1); // Fill the rectangle g2D.draw(new Line2D.Float(p1, p2)); }
} public class CyclicGradientPaint {
public static void main(String[] a) { JFrame window = new JFrame("Cyclic Gradient Paint"); window.setBounds(30, 30, 300, 300); window.getContentPane().add(new GradientPane()); window.setVisible(true); }
}</source>
Drawing with a Gradient Color
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import javax.swing.JComponent; import javax.swing.JFrame; public class BasicDraw {
public static void main(String[] args) { new BasicDraw(); } BasicDraw() { JFrame frame = new JFrame(); frame.add(new MyComponent()); frame.setSize(300, 300); frame.setVisible(true); }
} class MyComponent extends JComponent {
public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Color startColor = Color.red; Color endColor = Color.blue; int startX = 10, startY = 20, endX = 30, endY = 40; GradientPaint gradient = new GradientPaint(startX, startY, startColor, endX, endY, endColor); g2d.setPaint(gradient); g2d.draw(new Rectangle(20,20,200,200)); }
}</source>
Gradients: a smooth blending of shades from light to dark or from one color to another
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; public class GradientsRedYellow extends JPanel {
public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; GradientPaint gp1 = new GradientPaint(5, 5, Color.red, 20, 20, Color.yellow, true); g2d.setPaint(gp1); g2d.fillRect(20, 20, 300, 40); } public static void main(String[] args) { JFrame frame = new JFrame("GradientsRedYellow"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new GradientsRedYellow()); frame.setSize(350, 350); frame.setLocationRelativeTo(null); frame.setVisible(true); }
}</source>
Gradients in the middle
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; public class GradientsMiddle extends JPanel {
public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; GradientPaint gp1 = new GradientPaint(0, 0, Color.orange, 0, 20, Color.black, true); g2d.setPaint(gp1); g2d.fillRect(20, 260, 300, 40); } public static void main(String[] args) { JFrame frame = new JFrame("GradientsMiddle"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new GradientsMiddle()); frame.setSize(350, 350); frame.setLocationRelativeTo(null); frame.setVisible(true); }
}</source>
Horizontal Gradients
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; public class GradientsLine extends JPanel {
public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; GradientPaint gp1 = new GradientPaint(5, 25, Color.green, 2, 2, Color.black, true); g2d.setPaint(gp1); g2d.fillRect(20, 140, 300, 40); } public static void main(String[] args) { JFrame frame = new JFrame("GradientsLine"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new GradientsLine()); frame.setSize(350, 350); frame.setLocationRelativeTo(null); frame.setVisible(true); }
}</source>
String gradient paint
<source lang="java">
import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; public class StringGraidentPaint extends JFrame {
public StringGraidentPaint() { getContentPane().add(new DrawingCanvas()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 500); setVisible(true); } public static void main(String arg[]) { new StringGraidentPaint(); }
} class DrawingCanvas extends JPanel {
Font font = new Font("Dialog", Font.BOLD, 40); FontMetrics fontMetrics; DrawingCanvas() { setSize(300, 300); setBackground(Color.white); fontMetrics = getFontMetrics(font); } public void paint(Graphics g) { Graphics2D g2D = (Graphics2D) g; int w = getSize().width; int h = getSize().height; g2D.setFont(font); GradientPaint gp = new GradientPaint( 30.0f, 50.0f, Color.blue, fontMetrics.stringWidth("Hello!"), fontMetrics.getHeight(), Color.red); g2D.setPaint(gp); g2D.drawString("Hello!", 20,200);
}
}</source>
Vertical Gradient Paint
<source lang="java">
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; public class GradientsVertical extends JPanel {
public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; GradientPaint gp1 = new GradientPaint(25, 25, Color.blue, 15, 25, Color.black, true); g2d.setPaint(gp1); g2d.fillRect(20, 200, 300, 40); } public static void main(String[] args) { JFrame frame = new JFrame("GradientsVertical"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new GradientsVertical()); frame.setSize(350, 350); frame.setLocationRelativeTo(null); frame.setVisible(true); }
}</source>