【发布时间】:2019-10-27 11:16:16
【问题描述】:
我正在创建一个聊天,但这没关系。我还没有问题,一切正常,但我想更改 UI 外观,以便用户可以拥有更大的 JTextArea,而不是按钮占用比需要更多的空间。另外,我想调整 JTextArea 的大小,而不是在一行中写几个文本。最后,我要感谢你花时间帮助我:D
目标:
设置 JLabel 或 JTextArea 的大小,使按钮保持较小。
当文本达到正确限制时展开 JLabel 并将其放入新行(有点 WhatsApp)。
代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JTextField;
class MyFirstChatSO extends JFrame {
JLabel title;
JTextArea messages;
JTextField text;
JButton send;
public MyFirstChatSO () {
setLayout(new BorderLayout(0,10));
title = new JLabel("-Chat-");
title.setHorizontalAlignment(JLabel.CENTER);
title.setFont(new Font("Gabriola",Font.ITALIC,34));
add(title, BorderLayout.NORTH);
messages = new JTextArea();
messages.setEnabled(false);
messages.setBorder(BorderFactory.createLineBorder(new Color(168,168,168),2,true));
add(messages, BorderLayout.CENTER);
JPanel subPanel = new JPanel();
subPanel.setLayout(new GridLayout(0,2));
text = new JTextField();
subPanel.add(text);
send = new JButton("Send");
subPanel.add(send);
add(subPanel, BorderLayout.SOUTH);
}
public static void main(String[] args) {
MyFirstChatSO chat = new MyFirstChatSO();
chat.setSize(600,450);
chat.setLocationRelativeTo(null);
chat.setVisible(true);
chat.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
如果有任何其他方法(例如使用不同的 layoutsManagers)是解决方案,最好了解一下。
又一次失败,但这次是使用 GridBagLayout(我不知道如何使用它,请帮助我):
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JTextField;
class MyFirstChatSO extends JFrame {
JLabel title;
JTextArea messages;
JTextField text;
JButton send;
public MyFirstChatSO () {
setLayout(new BorderLayout(0,10));
title = new JLabel("-Chat-");
title.setHorizontalAlignment(JLabel.CENTER);
title.setFont(new Font("Gabriola",Font.ITALIC,34));
add(title, BorderLayout.NORTH);
messages = new JTextArea();
messages.setEnabled(false);
messages.setBorder(BorderFactory.createLineBorder(new Color(168,168,168),2,true));
add(messages, BorderLayout.CENTER);
JPanel subPanel = new JPanel();
subPanel.setLayout(new GridBagLayout());
GridBagConstraints gb = new GridBagConstraints();
gb.weightx = 1;
gb.weighty = 1;
gb.fill = GridBagConstraints.HORIZONTAL;
text = new JTextField();
gb.gridx = 0;
gb.gridy = 0;
gb.gridwidth = 6;
gb.fill = GridBagConstraints.HORIZONTAL;
subPanel.add(text,gb);
send = new JButton("Send");
gb.gridx = 7;
gb.gridy = 0;
subPanel.add(send,gb);
add(subPanel, BorderLayout.SOUTH);
}
public static void main(String[] args) {
MyFirstChatSO chat = new MyFirstChatSO();
chat.setSize(600,450);
chat.setLocationRelativeTo(null);
chat.setVisible(true);
chat.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
【问题讨论】:
-
“设置 JLabel 或 JTextArea 的大小,使按钮保持较小。” 我会考虑使用
GridBagLayout或复合布局的组合 -
“当文本达到正确的限制时展开 JLabel 并将其放入新行(有点像 WhatsApp)。” - 可能的想法。也许考虑使用只读的
JTextArea不嵌入它自己的JScrollPane。有趣的是,GridBagLayout将允许它根据需要增长。您也可以使用JLabel并将文本包装在html -
哦,谢谢...但是,¿您能把它作为官方答案发布吗?
-
另外,我在这里尝试使用 gridbaglayout 进行尝试(仍然不起作用):code.sololearn.com/c0TfyKCNq9Th/#java
标签: java user-interface