100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java swing 聊天气泡_Java Swing中的聊天气泡

java swing 聊天气泡_Java Swing中的聊天气泡

时间:2023-08-31 19:11:10

相关推荐

java swing 聊天气泡_Java Swing中的聊天气泡

本文将向您解释“如何在Java swing应用程序中绘制聊天气泡?”

聊天气泡与呼出气泡或思想气泡相同。

今天,大多数聊天应用程序都以这种格式显示转换,因此本文将帮助您在用Java swing创建的桌面应用程序中进行相同的操作。

以下课程用于绘制第一个聊天气泡:(箭头位于气泡的左侧)

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Polygon;

import java.awt.RenderingHints;

import java.awt.geom.Area;

import java.awt.geom.RoundRectangle2D;

import javax.swing.JPanel;

/**

* @author harsh

*/

public class LeftArrowBubble extends JPanel {

private static final long serialVersionUID = -5389178141802153305L;

private int radius = 10;

private int arrowSize = 12;

private int strokeThickness = 3;

private int padding = strokeThickness / 2;

@Override

protected void paintComponent(final Graphics g) {

final Graphics2D g2d = (Graphics2D) g;

g2d.setColor(new Color(0.5f, 0.8f, 1f));

int x = padding + strokeThickness + arrowSize;

int width = getWidth() - arrowSize - (strokeThickness * 2);

int bottomLineY = getHeight() - strokeThickness;

g2d.fillRect(x, padding, width, bottomLineY);

g2d.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));

g2d.setStroke(new BasicStroke(strokeThickness));

RoundRectangle2D.Double rect = new RoundRectangle2D.Double(x, padding, width, bottomLineY, radius, radius);

Polygon arrow = new Polygon();

arrow.addPoint(20, 8);

arrow.addPoint(0, 10);

arrow.addPoint(20, 12);

Area area = new Area(rect);

area.add(new Area(arrow));

g2d.draw(area);

}

}

下面的代码是绘制第二个聊天气泡。 (箭头指向气泡的右侧):

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Polygon;

import java.awt.RenderingHints;

import java.awt.geom.Area;

import java.awt.geom.RoundRectangle2D;

import javax.swing.JPanel;

/**

* @author harsh

*/

public class RightArrowBubble extends JPanel {

private static final long serialVersionUID = -5389178141802153305L;

private int strokeThickness = 3;

private int radius = 10;

private int arrowSize = 12;

private int padding = strokeThickness / 2;

@Override

protected void paintComponent(final Graphics g) {

final Graphics2D g2d = (Graphics2D) g;

g2d.setColor(new Color(0.5f, 0.5f, 1f));

int bottomLineY = getHeight() - strokeThickness;

int width = getWidth() - arrowSize - (strokeThickness * 2);

g2d.fillRect(padding, padding, width, bottomLineY);

RoundRectangle2D.Double rect = new RoundRectangle2D.Double(padding, padding, width, bottomLineY, radius, radius);

Polygon arrow = new Polygon();

arrow.addPoint(width, 8);

arrow.addPoint(width + arrowSize, 10);

arrow.addPoint(width, 12);

Area area = new Area(rect);

area.add(new Area(arrow));

g2d.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));

g2d.setStroke(new BasicStroke(strokeThickness));

g2d.draw(area);

}

}

这是使用以上两个类的代码:

import java.awt.HeadlessException;

import .MalformedURLException;

import .URL;

import javax.swing.GroupLayout;

import javax.swing.ImageIcon;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.SwingUtilities;

/**

* @author harsh

*/

public class TestPanel extends JPanel {

private static final long serialVersionUID = 9029457020704524363L;

private JLabel messageLbl1, userImageLbl1, messageLbl, userImageLbl;

private JPanel msgPanel1, msgPanel;

String userImageUrl = "/data/icons/nuvola2/22x22/apps/personal.png";

public TestPanel() throws MalformedURLException {

userImageLbl = new JLabel();

msgPanel = new LeftArrowBubble();

messageLbl = new JLabel();

messageLbl1 = new JLabel();

msgPanel1 = new RightArrowBubble();

userImageLbl1 = new JLabel();

userImageLbl.setIcon(new ImageIcon(new URL(userImageUrl)));

messageLbl.setText("Hi, How are you?");

GroupLayout msgPanelLayout = new GroupLayout(msgPanel);

msgPanel.setLayout(msgPanelLayout);

msgPanelLayout.setHorizontalGroup(

msgPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addGroup(msgPanelLayout.createSequentialGroup()

.addGap(21, 21, 21)

.addComponent(messageLbl)

.addContainerGap(162, Short.MAX_VALUE))

);

msgPanelLayout.setVerticalGroup(

msgPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addGroup(msgPanelLayout.createSequentialGroup()

.addComponent(messageLbl)

.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);

messageLbl1.setIcon(new ImageIcon(new URL(userImageUrl)));

userImageLbl1.setText("I'm Good.");

GroupLayout jPanel1Layout = new GroupLayout(msgPanel1);

msgPanel1.setLayout(jPanel1Layout);

jPanel1Layout.setHorizontalGroup(

jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addGroup(GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()

.addContainerGap(171, Short.MAX_VALUE)

.addComponent(userImageLbl1)

.addGap(22, 22, 22))

);

jPanel1Layout.setVerticalGroup(

jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addGroup(jPanel1Layout.createSequentialGroup()

.addComponent(userImageLbl1)

.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);

GroupLayout layout = new GroupLayout(this);

this.setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(userImageLbl)

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)

.addComponent(msgPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(msgPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

.addComponent(messageLbl1)

.addContainerGap())

);

layout.setVerticalGroup(

layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addComponent(userImageLbl)

.addComponent(msgPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))

.addGap(18, 18, 18)

.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addComponent(messageLbl1)

.addComponent(msgPanel1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))

.addContainerGap(22, Short.MAX_VALUE))

);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

try {

JOptionPane.showMessageDialog(null, new TestPanel());

} catch (HeadlessException e) {

e.printStackTrace();

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

});

}

}

参考: harryjoy博客上来自我们JCG合作伙伴 Harsh Raval的java swing中的聊天气泡 。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。