【发布时间】:2016-01-31 03:14:51
【问题描述】:
我正在尝试使用 Java Swing 制作一个聊天应用程序,但我遇到了聊天气泡问题。我设法完成了起泡部分,但我似乎无法正确放置它们。这是我的代码
package messagebubble;
import java.awt.BorderLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import messagebubble.RoundedBorder;
public class Main {
public static void main(String[] args) {
JFrame window = new JFrame();
JPanel chat = new JPanel();
chat.setLayout(new BoxLayout(chat, BoxLayout.PAGE_AXIS));
JPanel painel = new JPanel(new BorderLayout());
JPanel painel2 = new JPanel(new BorderLayout());
JTextArea msg = new JTextArea();
msg.setLineWrap(true);
msg.setWrapStyleWord(true);
msg.setText("ola tudo bem meus caros amigos, como estão? há muito que não vos via por estas bandas haha lol");
msg.setBorder(new RoundedBorder());
msg.setColumns(msg.getLineCount());
JTextArea msg2 = new JTextArea();
msg2.setLineWrap(true);
msg2.setWrapStyleWord(true);
msg2.setText("ola tudo bem");
msg2.setBorder(new RoundedBorder());
painel.add(msg,BorderLayout.NORTH);
chat.add(painel);
painel2.add(msg2,BorderLayout.NORTH);
chat.add(painel2);
window.add(chat);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setSize(400, 500);
window.setVisible(true);
}
}
这是圆形边框
package GUI;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.border.AbstractBorder;
public class RoundedBorder extends AbstractBorder {
@Override
public void paintBorder(Component c, Graphics g, int x, int y, int width,
int height) {
Graphics2D graph = (Graphics2D) g.create();
RoundRectangle2D round = new RoundRectangle2D.Float(x, y, width - 1,
height - 1, 30, 30);
Container parent = c.getParent();
if (parent != null) {
graph.setColor(parent.getBackground());
Area canto = new Area(new Rectangle2D.Float(x,y,width,height));
canto.subtract(new Area(round));
graph.fill(canto);
}
graph.setColor(Color.GRAY);
graph.draw(round);
graph.dispose();
}
@Override
public Insets getBorderInsets(Component c) {
return new Insets(5, 10, 5, 10);
}
@Override
public Insets getBorderInsets(Component c, Insets insets) {
insets.left = 10;
insets.right = insets.left;
insets.top = 5;
insets.bottom = insets.top;
return insets;
}
}
输出看起来像这样Output。我无法摆脱消息之间的空白或底部 JTextArea 中的空白。
我还尝试将面板的最大尺寸设置为他们喜欢的尺寸,它看起来像 Output2 这太窄了。
知道如何解决这个问题吗?我想要实现的是这样的ideal
【问题讨论】:
-
考虑创建和发布 1) 你的 minimal reproducible example(请阅读链接)和 2) 当前和所需 GUI 的图像。
-
那么,您想要输出到什么样的外观?顶部的大输出框和底部的小输入线?还是每条消息的全宽条?
-
@tobias_k 我添加了一个理想的输出。基本上我希望它看起来像 android 消息应用程序,但现在我会满足于删除额外的空间。
-
@tobias_k 我相信他希望 FROM 消息在右侧有一个边距,而 TO 消息在左侧有一个边距(这是当今聊天应用程序中的常见约定)
-
@ggpfc 请发布一个可运行的代码示例,如果没有更多上下文,很难提供帮助
标签: java swing user-interface chat layout-manager