我正在使用Spring布局为我正在构建的应用程序设计一个gui。我对弹簧布局有问题;组件之间没有正确的间隔,特别是消息框和发送按钮,如图中所示:

下面是应用程序的代码:
package com.cliff777.chat;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
public class ChatMain
{
final int WIDTH = 800;
final int HEIGHT = 600;
JTextField messageBox = new JTextField(); //write a message in
JTextArea chatBox = new JTextArea(); //displays the messages
JButton sendButton = new JButton("Send");
void setupGui(Container container)
{
container.setPreferredSize(new Dimension(WIDTH, HEIGHT));
SpringLayout layout = new SpringLayout();
container.setLayout(layout);
container.add(messageBox);
container.add(chatBox);
container.add(sendButton);
layout.putConstraint(SpringLayout.NORTH, chatBox, 5, SpringLayout.NORTH, container);
layout.putConstraint(SpringLayout.WEST, chatBox, 5, SpringLayout.WEST, container);
layout.putConstraint(SpringLayout.EAST, chatBox, 5, SpringLayout.EAST, container);
layout.putConstraint(SpringLayout.SOUTH, chatBox, 5, SpringLayout.NORTH, messageBox);
layout.putConstraint(SpringLayout.SOUTH, chatBox, 5, SpringLayout.NORTH, sendButton);
layout.putConstraint(SpringLayout.WEST, messageBox, 5, SpringLayout.WEST, container);
layout.putConstraint(SpringLayout.SOUTH, messageBox, 5, SpringLayout.SOUTH, container);
layout.putConstraint(SpringLayout.EAST, messageBox, 5, SpringLayout.WEST, sendButton);
layout.putConstraint(SpringLayout.EAST, sendButton, 5, SpringLayout.EAST, container);
layout.putConstraint(SpringLayout.SOUTH, sendButton, 5, SpringLayout.SOUTH, container);
//container.add(messageBox);
//container.add(chatBox);
//container.add(sendButton);
}
public ChatMain()
{
JFrame frame = new JFrame("Chat");
setupGui(frame.getContentPane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
chatBox.setEditable(false);
while(true)
{
chatBox.setText(chatBox.getText() + messageBox.getText());
messageBox.setText("");
try
{
Thread.sleep(5000);
}
catch (Exception e)
{
}
}
}
public static void main(String[] args)
{
new ChatMain();
}
}发布于 2014-11-25 10:59:52
声明首选大小container.setPreferredSize(new Dimension(WIDTH, HEIGHT));并不意味着布局知道容器的宽度和高度。实际上,布局知道它们(宽度和高度),但它也想知道如何在窗口调整大小时的行为。SpringLayout喜欢忽略大小,每次都这样做。
下列约束可能是您需要的约束:
// set the borders of chatBox
layout.putConstraint(SpringLayout.NORTH, chatBox, 5, SpringLayout.NORTH, container);
layout.putConstraint(SpringLayout.WEST, chatBox, 5, SpringLayout.WEST, container);
layout.putConstraint(SpringLayout.EAST, chatBox, 5, SpringLayout.EAST, container);
// set the borders of messageBox
layout.putConstraint(SpringLayout.NORTH, messageBox, 5, SpringLayout.SOUTH, chatBox);
layout.putConstraint(SpringLayout.WEST, messageBox, 5, SpringLayout.WEST, container);
// set the borders of sendButton
layout.putConstraint(SpringLayout.NORTH, sendButton, 5, SpringLayout.SOUTH, chatBox);
layout.putConstraint(SpringLayout.WEST, sendButton, 5, SpringLayout.EAST, messageBox);
// the most importent part set the borders of container (you need only bottom-right)
layout.putConstraint(SpringLayout.EAST, container, 5, SpringLayout.EAST, sendButton);
layout.putConstraint(SpringLayout.SOUTH, container, 5, SpringLayout.SOUTH, sendButton);您的程序中的主要问题是容器边界不清楚,因此出现了奇怪的重叠。
对于更复杂的任务,您可以向GridBagLayout的方向看。
https://stackoverflow.com/questions/27084009
复制相似问题