gpt4 book ai didi

java - 聊天窗口类的 Libgdx 滚动 Pane 问题

转载 作者:行者123 更新时间:2023-11-30 04:01:25 26 4
gpt4 key购买 nike

我在 libgdx 中使用滚动 Pane 时遇到问题。它将用于聊天窗口类。当您按 Enter 键时,消息将添加到窗口中,并且您将滚动到最新发布的消息。但是事实并非如此。它错过了一条消息并滚动到最新消息之前的一条消息。下面我发布了聊天窗口类以及向其添加输入的方法。 textAreaholder 是一个包含所有内容的表。聊天字段是您输入要发布到聊天的内容的地方。聊天区域是随后添加到表中的文本字段。但如前所述,它无法正确滚动,错误正确地位于 keyTyped 方法中的某个位置。

public ChatWindow(final Pipe<String> chatPipe) {
this.chatPipe = chatPipe;
messageFieldCounter = 0;

white = new BitmapFont(Gdx.files.internal("fonts/ChatWindowText.fnt"), false);
fontSize = white.getLineHeight();
white.scale(TEXT_SCALE);
final TextFilter filter = new TextFilter();

/* Making a textfield style */
textFieldStyle = new TextFieldStyle();
textFieldStyle.fontColor = Color.WHITE;
textFieldStyle.font = white;
textFieldStyle.focusedFontColor = Color.CYAN;

/*Area where all chat appears*/
textAreaHolder = new Table();
textAreaHolder.debug();

/*Applies the scrollpane to the chat area*/
scrollPane = new ScrollPane(textAreaHolder);
scrollPane.setForceScroll(false, true);
scrollPane.setFlickScroll(true);
scrollPane.setOverscroll(false, false);

/*Input chat*/
chatField = new TextField("", textFieldStyle);
chatField.setTextFieldFilter(filter);

/*Tries to make the textField react on enter?*/
chatField.setTextFieldListener(new TextFieldListener() {
@Override
public void keyTyped(final TextField textField, final char key) {
if (key == '\n' || key == '\r') {
if (messageFieldCounter <= 50) {
textAreaHolder.row();
StringBuilder message = new StringBuilder(); //Creates the message
message.append(chatField.getText()); //Appends the chatfield entry
TextArea chatArea = new TextArea(message.toString(), textFieldStyle); //Creates a chatArea with the message
chatArea.setHeight(fontSize + 1);
chatArea.setDisabled(true);
chatArea.setTextFieldFilter(filter);
textAreaHolder.add(chatArea).height(CHAT_INPUT_HEIGHT).width(CHAT_WIDTH);

scrollPane.scrollToCenter(0, 0, 0, 0);



//Scrolls to latest input


chatField.setText("");
//InputDecider.inputDecision(message.toString(), chatPipe); //TODO: Change the filter
//chatPipe.put(message.toString()); //TODO: testing
}
}
}
});

最佳答案

可能会出现问题,因为您使用的 scrollPane.scrollToCenter(float x, float y, float width, float height) 参数为零:

scrollPane.scrollToCenter(0, 0, 0, 0);

scrollToCenter 方法要求正确提供参数。因此,尝试提供消息边界。

第二个原因可能是因为您在表格布局本身之前调用了 scrollToCenter 。因此,尝试覆盖表格的 layout 方法并在之后调用 scrollToCenter:

@Override
public void layout()
{
super.layout();
if (new_messages_added)
{
scrollPane.scrollToCenter(...)
}
}

关于java - 聊天窗口类的 Libgdx 滚动 Pane 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908942/

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