gpt4 book ai didi

Java 聊天框附加额外的空格

转载 作者:行者123 更新时间:2023-12-01 20:05:55 24 4
gpt4 key购买 nike

我有一个简单的聊天框,其中包含以下代码:

public class Chatbox extends JFrame
{
JPanel mainPanel;
JTextArea inputField;
JTextArea chatTextArea;
JLabel chatLabel;
boolean typing;
Timer t;

public Chatbox()
{
createAndShowGUI();
}

private void createAndShowGUI()
{
// Set frame properties
setTitle("Plain Text Editor - <ID>");
setDefaultCloseOperation(EXIT_ON_CLOSE);

// Create a JPanel and set layout
mainPanel=new JPanel();
mainPanel.setLayout(new GridLayout(0,1));


// Create JTextField, add it.
inputField=new JTextArea();

//inputField.setWrapStyleWord(true);
inputField.setLineWrap(true);

JScrollPane sp = new JScrollPane(inputField, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
mainPanel.add(sp);

// Add panel to the south,
add(mainPanel,BorderLayout.SOUTH);


// Add a KeyListener
inputField.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent ke)
{
// If he presses enter, add text to chat textarea
if(ke.getKeyCode()==KeyEvent.VK_ENTER) showLabel(inputField.getText());
}


});

// Create a textarea
chatTextArea=new JTextArea();

// Make it non-editable
chatTextArea.setEditable(false);

// Set some margin, for the text
chatTextArea.setMargin(new Insets(7,7,7,7));

chatTextArea.setLineWrap(true);
chatTextArea.setWrapStyleWord(true);


// Set a scrollpane
JScrollPane js=new JScrollPane(chatTextArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
add(js);

addWindowListener(new WindowAdapter(){
public void windowOpened(WindowEvent we)
{
// Get the focus when window is opened
inputField.requestFocus();
}
});

setSize(400,400);
setLocationRelativeTo(null);
setVisible(true);
}

private void showLabel(String text)
{
// If text is empty return
if(text.trim().isEmpty()) return;

// Otherwise, append text with a new line
chatTextArea.append(text+"\n");

// Set textfield and label text to empty string
inputField.setText("");
}
}

但是,当我按 Enter 键进入文本区域时,会附加一个额外的空格。如何才能使消息单独附加而无需额外的空白?

我也不确定 JScrollPane 是否弄乱了间距,因为在我实现 JScrollPane 之前没有发生此问题。

最佳答案

chatTextArea.append(text+"\n"); 每次添加新文本时都会附加一个新行。

相反,您可以考虑在文本前添加一个新行(当文本已存在于聊天窗口中时),例如...

private void showLabel(String text) {
// If text is empty return
if (text.trim().isEmpty()) {
return;
}

if (!chatTextArea.getText().isEmpty()) {
text = "\n" + text;
}

// Otherwise, append text with a new line
chatTextArea.append(text);

// Set textfield and label text to empty string
inputField.setText("");
}

另外的新行也将来自您的输入JTextArea(这花了我一些时间才意识到,因为我期待的是JTextField🙄)

发生这种情况是因为 KeyEvent.VK_ENTER 很可能会在 之前由 JTextArea(及其底层 Document)处理。 KeyListener,这意味着新行现在实际上是文本的一部分。

您可以考虑在将文本发送到 showLabel 方法之前修剪文本,例如...

inputField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
// If he presses enter, add text to chat textarea
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
showLabel(inputField.getText().trim());
}
}
});

但是,更好的解决方案是尝试手动删除 String 末尾的空格,因为 trim 将删除前导和尾随空格,但我会让你自己解决这个问题

关于Java 聊天框附加额外的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58985268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com