在Swing中绘制美丽的演讲泡泡[closed](Draw Beautiful Speech Bubbles in Swing [closed])

编程入门 行业动态 更新时间:2024-10-25 10:21:16
在Swing中绘制美丽的演讲泡泡[closed](Draw Beautiful Speech Bubbles in Swing [closed])

我试图在秋千上创造美丽的泡泡,但结果不是很好......我的意思是我想要更好更漂亮的东西!

这里是我使用的代码:

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, padding, width, 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_ANTIALIAS_ON); qualityHints.put(RenderingHints.KEY_RENDERING, 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, padding, width, height); RoundRectangle2D.Double rect = new RoundRectangle2D.Double(padding, padding, width, height, radius, 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)中使用泡泡语言,但我不知道如何绘制这样的东西......任何人都可以帮助我吗?

谢谢!

I am trying to create beautiful speech bubbles in swing but the result is not very good...I mean I want something better and more beautiful!

here is the code i'm using:

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, padding, width, 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_ANTIALIAS_ON); qualityHints.put(RenderingHints.KEY_RENDERING, 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, padding, width, height); RoundRectangle2D.Double rect = new RoundRectangle2D.Double(padding, padding, width, height, radius, 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(); } } }

any idea guys?

I want something like speech bubbles in viber (android version 5.0.0) but I don't know how to draw something like that... can anyone help me?

Thanks!

最满意答案

最后我用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, 150, 180)); int width = getWidth(); int height = getHeight(); GeneralPath path = new GeneralPath(); path.moveTo(5, 10); path.curveTo(5, 10, 7, 5, 0, 0); path.curveTo(0, 0, 12, 0, 12, 5); path.curveTo(12, 5, 12, 0, 20, 0); path.lineTo(width - 10, 0); path.curveTo(width - 10, 0, width, 0, width, 10); path.lineTo(width, height - 10); path.curveTo(width, height - 10, width, height, width - 10, height); path.lineTo(15, height); path.curveTo(15, height, 5, height, 5, height - 10); path.lineTo(5, 15); path.closePath(); graphics2D.fill(path); }

finally I draw it with GeneralPath...

enter image description here

close enough? :))

@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, 150, 180)); int width = getWidth(); int height = getHeight(); GeneralPath path = new GeneralPath(); path.moveTo(5, 10); path.curveTo(5, 10, 7, 5, 0, 0); path.curveTo(0, 0, 12, 0, 12, 5); path.curveTo(12, 5, 12, 0, 20, 0); path.lineTo(width - 10, 0); path.curveTo(width - 10, 0, width, 0, width, 10); path.lineTo(width, height - 10); path.curveTo(width, height - 10, width, height, width - 10, height); path.lineTo(15, height); path.curveTo(15, height, 5, height, 5, height - 10); path.lineTo(5, 15); path.closePath(); graphics2D.fill(path); }

更多推荐

本文发布于:2023-07-16 12:38:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1128546.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:泡泡   美丽   closed   Swing   Speech

发布评论

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

>www.elefans.com

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