Java 在秋千上画美丽的演讲泡泡
我试图在swing中创建漂亮的语音泡泡,但结果不是很好……我的意思是我想要更好、更漂亮的东西 以下是我正在使用的代码:Java 在秋千上画美丽的演讲泡泡,java,swing,graphics,drawing,shapes,Java,Swing,Graphics,Drawing,Shapes,我试图在swing中创建漂亮的语音泡泡,但结果不是很好……我的意思是我想要更好、更漂亮的东西 以下是我正在使用的代码: 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) {
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),但我不知道如何绘制这样的东西。。。
有人能帮我吗
谢谢 最后我用
GeneralPath
绘制它
够近吗?:)
最后我用
GeneralPath
绘制它
够近吗?:)
观察形状APIUse 2 Ellipse,并将其相交以创建圆形三角形。我认为圆形的矩形很好。不要忘记设置框架来创建这个圆角三角形。您展示的viber示例有一个浅色阴影。我想这对你认为它更美丽的贡献最大。否则(除了更多的圆角和弯曲的“出口”)你自己的解决方案已经非常接近了。@afzalex我想我可以用
GeneralPath
画出来,那么你的问题是什么。你希望你的程序做什么。这是褪色的行为吗?看看APIUse 2椭圆的形状,并将它们相交以创建圆形三角形。我认为圆形的矩形很好。不要忘记设置框架来创建这个圆角三角形。您展示的viber示例有一个浅色阴影。我想这对你认为它更美丽的贡献最大。否则(除了更多的圆角和弯曲的“出口”)你自己的解决方案已经非常接近了。@afzalex我想我可以用GeneralPath
画出来,那么你的问题是什么。你希望你的程序做什么。这是褪色的行为吗?祝贺你,你成功了。但我想澄清一下,你的问题当时还不清楚,有人可以帮你解决这个问题。下次请尽量把你的问题说清楚。甚至我还以为你说你可以用GeneralPath做这个东西,但你还有其他问题。祝贺你,你成功了。但我想澄清一下,你的问题当时还不清楚,有人可以帮你解决这个问题。下次请尽量把你的问题说清楚。甚至我还以为你在说你可以用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);
}