加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在Swing中绘制美丽的语音气泡

发布时间:2020-12-15 04:22:25 所属栏目:Java 来源:网络整理
导读:我想在秋千上创造美丽的泡泡,但效果不是很好……我的意思是我想要更好更好的东西! 这是我正在使用的代码: import javax.swing.*;import java.awt.*;import java.awt.geom.Area;import java.awt.geom.RoundRectangle2D;public class BubbleTest { public st
我想在秋千上创造美丽的泡泡,但效果不是很好……我的意思是我想要更好更好的东西!

这是我正在使用的代码:

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;

public class BubbleTest {

    public static void main(String[] args) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
        LeftArrowBubble leftArrowBubble = new LeftArrowBubble();
        JOptionPane.showMessageDialog(null,leftArrowBubble);
        RightArrowBubble rightArrowBubble = new RightArrowBubble();
        JOptionPane.showMessageDialog(null,rightArrowBubble);
    }

    private static class LeftArrowBubble extends JPanel {

        private int strokeThickness = 5;
        private int padding = strokeThickness / 2;
        private int radius = 10;
        private int arrowSize = 6;

        @Override
        protected void paintComponent(final Graphics g) {
            final Graphics2D graphics2D = (Graphics2D) g;
            RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            qualityHints.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
            graphics2D.setRenderingHints(qualityHints);
            graphics2D.setColor(new Color(80,150,180));
            graphics2D.setStroke(new BasicStroke(strokeThickness));
            int x = padding + strokeThickness + arrowSize;
            int width = getWidth() - arrowSize - (strokeThickness * 2);
            int height = getHeight() - strokeThickness;
            graphics2D.fillRect(x,padding,width,height);
            RoundRectangle2D.Double rect = new RoundRectangle2D.Double(x,height,radius,radius);
            Polygon arrow = new Polygon();
            arrow.addPoint(14,6);
            arrow.addPoint(arrowSize + 2,10);
            arrow.addPoint(14,12);
            Area area = new Area(rect);
            area.add(new Area(arrow));
            graphics2D.draw(area);
            graphics2D.dispose();
        }

    }

    private static class RightArrowBubble extends JPanel {

        private int strokeThickness = 5;
        private int padding = strokeThickness / 2;
        private int arrowSize = 6;
        private int radius = 10;

        @Override
        protected void paintComponent(final Graphics g) {
            final Graphics2D graphics2D = (Graphics2D) g;
            RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_RENDER_QUALITY);
            graphics2D.setRenderingHints(qualityHints);
            graphics2D.setColor(new Color(20,130,230));
            graphics2D.setStroke(new BasicStroke(strokeThickness));
            int width = getWidth() - arrowSize - (strokeThickness * 2);
            int height = getHeight() - strokeThickness;
            graphics2D.fillRect(padding,height);
            RoundRectangle2D.Double rect = new RoundRectangle2D.Double(padding,radius);
            Polygon arrow = new Polygon();
            arrow.addPoint(width,6);
            arrow.addPoint(width + arrowSize,10);
            arrow.addPoint(width,12);
            Area area = new Area(rect);
            area.add(new Area(arrow));
            graphics2D.draw(area);
            graphics2D.dispose();
        }

    }

}

任何想法的家伙?

我想在viber中使用语音泡泡(android版本5.0.0),但我不知道如何绘制这样的东西……
谁能帮我?

谢谢!

解决方法

最后我用GeneralPath绘制它…

足够近? :))

@Override
protected void paintComponent(final Graphics g) {
    final Graphics2D graphics2D = (Graphics2D) g;
    RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    qualityHints.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
    graphics2D.setRenderingHints(qualityHints);
    graphics2D.setPaint(new Color(80,180));
    int width = getWidth();
    int height = getHeight();
    GeneralPath path = new GeneralPath();
    path.moveTo(5,10);
    path.curveTo(5,10,7,5,0);
    path.curveTo(0,12,5);
    path.curveTo(12,20,0);
    path.lineTo(width - 10,0);
    path.curveTo(width - 10,10);
    path.lineTo(width,height - 10);
    path.curveTo(width,height - 10,width - 10,height);
    path.lineTo(15,height);
    path.curveTo(15,height - 10);
    path.lineTo(5,15);
    path.closePath();
    graphics2D.fill(path);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读