Java 3颜色渐变

编程入门 行业动态 更新时间:2024-10-09 20:30:05
本文介绍了Java 3颜色渐变的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个JPanel,我想在其中绘制一个渐变.我有下面的代码,但只绘制了2种颜色渐变.我想添加一个3,但不知道如何.我想要的是将面板的左上角设置为白色,右上角设置为红色,并且两个底角都设置为黑色.我要怎么做才能达到这个目的,就像这样:

I have a JPanel, and I would like to paint a gradient within it. I have the code below, but that only paints a 2 color gradient. I would like to add a 3rd but don't know how. What I want is to have the top left of the panel as white, top right red, and both bottom corners black. What would I have to do to achieve this, something that looks like this:

package pocketshop.util; import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JPanel; public class ColorPicker extends JPanel{ public ColorPicker(){ repaint(); } @Override public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; int w = getWidth(); int h = getHeight(); GradientPaint gp = new GradientPaint( 0, 0, Color.white, 0, h, Color.black); g2d.setPaint(gp); g2d.fillRect(0, 0, w, h); } }

可能的解决方案

Possible solution

我能够使用2个渐变(一个水平和一个垂直)得出这样的结果:

I was able to come up with using 2 gradients one horizontal and one vertical, like this:

public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; int w = getWidth(); int h = getHeight(); // Vertical GradientPaint gp = new GradientPaint( 0, 0, new Color(0,0,0,0), 0, h, Color.black); // Horizontal GradientPaint gp2 = new GradientPaint( 0, 0, Color.white, w, 0, Color.red, true); g2d.setPaint(gp2); g2d.fillRect(0, 0, w, h); g2d.setPaint(gp); g2d.fillRect(0, 0, w, h); }

推荐答案

像这样吗?

import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; import javax.swing.*; public class ThreeWayGradient { public static void main(String[] args) { final BufferedImage image = new BufferedImage( 200, 200, BufferedImage.TYPE_INT_RGB); Runnable r = new Runnable() { @Override public void run() { Graphics2D g = image.createGraphics(); GradientPaint primary = new GradientPaint( 0f, 0f, Color.WHITE, 200f, 0f, Color.ORANGE); GradientPaint shade = new GradientPaint( 0f, 0f, new Color(0, 0, 0, 0), 0f, 200f, new Color(0, 0, 0, 255)); g.setPaint(primary); g.fillRect(0, 0, 200, 200); g.setPaint(shade); g.fillRect(0, 0, 200, 200); JLabel l = new JLabel(new ImageIcon(image)); JOptionPane.showMessageDialog(null, l); File f = new File(System.getProperty("user.home"), "ThreeWayGradient.png"); try { ImageIO.write(image, "png", f); } catch (IOException ex) { ex.printStackTrace(); } } }; SwingUtilities.invokeLater(r); } }

将其制成工厂方法

..因为它更漂亮.

Making it into a factory method

..because it is prettier.

import java.awt.*; import java.awt.image.BufferedImage; import javax.swing.*; public class ThreeWayGradient { public static BufferedImage getThreeWayGradient( int size, Color primaryLeft, Color primaryRight, Color shadeColor) { BufferedImage image = new BufferedImage( size, size, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); GradientPaint primary = new GradientPaint( 0f, 0f, primaryLeft, size, 0f, primaryRight); int rC = shadeColor.getRed(); int gC = shadeColor.getGreen(); int bC = shadeColor.getBlue(); GradientPaint shade = new GradientPaint( 0f, 0f, new Color(rC, gC, bC, 0), 0f, size, shadeColor); g.setPaint(primary); g.fillRect(0, 0, size, size); g.setPaint(shade); g.fillRect(0, 0, size, size); g.dispose(); return image; } /** * Presumed to have a layout that shows multiple components. */ public static void addGradient( JPanel p, int s, Color pL, Color pR, Color sh) { JLabel l = new JLabel(new ImageIcon(getThreeWayGradient(s, pL, pR, sh))); p.add(l); } public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { JPanel gui = new JPanel(new GridLayout(2,4,1,1)); addGradient(gui,100,Color.YELLOW,Color.RED,Color.GREEN); addGradient(gui,100,Color.GREEN,Color.YELLOW,Color.RED); addGradient(gui,100,Color.RED,Color.GREEN,Color.YELLOW); addGradient(gui,100,Color.BLUE,Color.MAGENTA,Color.PINK); addGradient(gui,100,Color.WHITE,Color.RED,Color.BLACK); addGradient(gui,100,Color.RED,Color.GREEN,Color.BLACK); addGradient(gui,100,Color.BLUE,Color.PINK,Color.BLACK); addGradient(gui,100,Color.BLUE,Color.CYAN,Color.BLACK); JOptionPane.showMessageDialog(null, gui); } }; SwingUtilities.invokeLater(r); } }

更多推荐

Java 3颜色渐变

本文发布于:2023-11-30 22:36:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1651677.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:颜色   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!