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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |