我正在使用Java实现一个简单的聊天应用程序。我希望我的聊天应用程序,有一个像现代信息应用的“泡沫”消息的风格,所以我已经建立了2类LeftArrowBubble
和RightArrowBubble
其扩展JPanel来说明发送&接收机气泡,就像这样:如何将JPanels添加到JScrollPane?
这是我的LeftArrowBubble
类的代码(不太一样的RightArrowBubble
):
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);
}
}
现在我有上有一个JScrollPane
一个JFrame窗口,它看起来像这样:
我想现在要做的是,当我点击该按钮CreateNewBubble
,新Left(or Right)ArrowBubble
的JPanel将创建JScrollPane
(内部显示&这JScrollPane
将是垂直滚动的,如果有就更有气泡里面)。我已经试过这样:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
BubbleTest.LeftArrowBubble leftArrowBubble = new BubbleTest.LeftArrowBubble();
jScrollPane1.add(leftArrowBubble);
}
但正如我预料它没有工作:无点击按钮后,在JScrollPane
显示出来! 我一直坚持这个问题几个小时,真的很感激,如果你们可以帮忙!
请尝试发布主应用程序代码,以使我们能够协助您 – 2014-10-26 15:22:23