java布局管理器的问题
我正在建立一个小的聊天程序,我想要的是在不同的一面显示每一条消息 例如:左侧显示我的消息,右侧显示其他用户的消息 我写了这段代码:java布局管理器的问题,java,swing,layout,layout-manager,Java,Swing,Layout,Layout Manager,我正在建立一个小的聊天程序,我想要的是在不同的一面显示每一条消息 例如:左侧显示我的消息,右侧显示其他用户的消息 我写了这段代码: public final class ChatPanel extends javax.swing.JPanel { private javax.swing.JPanel main_panel; public ChatPanel() { main_panel = new javax.swing.JPanel(); main_panel.setLayout(
public final class ChatPanel extends javax.swing.JPanel {
private javax.swing.JPanel main_panel;
public ChatPanel() {
main_panel = new javax.swing.JPanel();
main_panel.setLayout(new javax.swing.BoxLayout(main_panel, javax.swing.BoxLayout.Y_AXIS));
main_panel.setBackground(java.awt.Color.green);
//add_message("Hello\n\n\nha", true);
//add_message("Hello", false);
javax.swing.JScrollPane pane = new javax.swing.JScrollPane(main_panel);
pane.setPreferredSize(new java.awt.Dimension(433, 213));
add(pane);
repaint();
}
public void add_system_message(String message) {
javax.swing.JTextPane message_area = new javax.swing.JTextPane();
message_area.setAlignmentX(javax.swing.JLabel.CENTER_ALIGNMENT);
javax.swing.text.SimpleAttributeSet center = new javax.swing.text.SimpleAttributeSet();
javax.swing.text.StyleConstants.setAlignment(center, javax.swing.text.StyleConstants.ALIGN_CENTER);
javax.swing.text.SimpleAttributeSet black = new javax.swing.text.SimpleAttributeSet();
javax.swing.text.StyleConstants.setForeground(black, java.awt.Color.BLACK);
javax.swing.text.StyledDocument doc = message_area.getStyledDocument();
try {
doc.insertString(doc.getLength(), message, black);
doc.setParagraphAttributes(doc.getLength(), 1, center, false);
} catch (javax.swing.text.BadLocationException e) {
System.err.println("ERROR:\n\t" + e.getMessage());
}
main_panel.add(message_area);
main_panel.repaint();
}
public void add_message(String message, boolean is_main_user) {
javax.swing.JTextArea stam = new javax.swing.JTextArea(message);
stam.setWrapStyleWord(true);
stam.setLineWrap(true);
stam.setEditable(false);
if (is_main_user) {
stam.setAlignmentX(javax.swing.JLabel.LEFT_ALIGNMENT);
} else {
stam.setAlignmentX(javax.swing.JLabel.RIGHT_ALIGNMENT);
}
stam.setBorder(javax.swing.BorderFactory.createMatteBorder(3, 3, 3, 3, java.awt.Color.red));
main_panel.add(stam);
main_panel.repaint();
repaint();
}
}
当我调用add_messageHello,false时,它工作正常;在Constructor中,但当我从另一个面板中的按钮调用此函数时,它不会添加消息
为什么会这样
附言
我通常不使用布局管理器,只使用netbeans GUI builder。您需要添加main_panel.revalidate;在重新绘制调用之前,以指示Swing布局管理器重新布局新添加的组件。欢迎您在关于此主题的最后一个问题中获得帮助,我建议您可以在JTextPane中使用属性。但是你删除了这个问题,连一句简单的感谢都没有。应在原始问题中提出后续问题,以便每个人都知道所建议的内容。所以这次我不想费心帮忙,因为你可能会再次删除答案。我在评论中写了谢谢你。我没有看到任何评论??你最初删除了问题,只是取消了删除。11分钟前,在我发表上述评论之后,你刚刚添加了评论。你仍然没有接受答案,即使思想告诉了你如何解决问题。除非他的目标是说服大多数人不要回答他未来的任何问题。非常感谢@tsolakp的快速回答,这很有效☺ 顺便问一下,您是否知道我是否可以在添加的组件之间创建一些间隙?再次感谢您☻在添加textfield后,可以尝试添加固定尺寸的框支柱。添加主面板.Add Box.createVerticalStrut10;在主面板之后。添加消息\u区域;。实际上,顺序应该是重新验证以调用布局管理器,然后重新绘制以确保正确地重新绘制组件。