Расположение коробок представляется вполне подходящим для потребностей типичного макета чата, такого как тот, который я сделал в InkScape.
Разметка чата с менеджером BoxLayout
Я на основе структуры, как это:
MainFrame
Chat JPanel - BoxLayout.Y_AXIS
Message list - ScrollablePanel
the list - BoxLayout.Y_AXIS
Text field - Just a text field
Теперь единственная проблема, я, кажется, в том, что в щёток фазе, пространство делится 50% до 50% от текстового поля и список сообщений.
Однако, если область сообщений заполнена, как вы можете видеть на картинке выше, и я стараюсь, чтобы изменить размер окна чата, все идет хорошо:
Итак:
- Я хочу, чтобы текстовая область сохраняла тот же размер, даже если контейнер сообщений пуст.
- Должен быть метод, который будет вызываться для имитации изменения размера окна, чтобы панели обновлялись должным образом.
Вот чат панель:
public class ChatPanel extends JPanel {
private BoxLayout layout;
private TextField input;
private MessageList messages;
public ChatPanel() {
layout = new BoxLayout(this, BoxLayout.Y_AXIS);
setLayout(layout);
//Create message list
messages = new MessageList();
messages.appendTo(this);
//Create text field
input = new TextField();
add(input);
}
public void addMessage(String message) {
messages.addMessage(message);
}
public void appendTo(JFrame frame) {
frame.getContentPane().add(this);
}
}
А вот messageList:
public class MessageList extends JPanel {
public MessageList() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
}
public void addMessage(String message) {
JLabel lb = new JLabel();
lb.setText(message);
add(lb);
validate();
}
public void appendTo(JPanel frame) {
frame.add(new JScrollPane(this));
}
}
Как правило, не смешивайте компоненты AWT, такие как 'java.awt.TextField', с компонентами Swing. – trashgod
Спасибо, что предупредил меня, однако теперь, когда я знаю, что не делать, мне любопытно, что мне делать вместо этого. Есть ли текстовое поле качания? –
Да, есть. «JTextField» – AloneInTheDark