Я реализую простое приложение чата, используя 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);
}
}
Теперь у меня есть окно JFrame с JScrollPane
на нем, который выглядит следующим образом:
То, что я хочу сделать сейчас, когда я нажимаю на эту кнопку 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
после нажатия на кнопку! Я застрял в этой проблеме часами, очень ценю, если вы, ребята, можете помочь!
Просьба попытаться опубликовать основной код приложения, чтобы мы могли вам помочь –