TextFieldWidget 不适用于 FabricMC (Java)

问题描述

最近我一直在努力学习一些关于 minecraft Modding 的东西。我选择使用Fabric Mod Loader来制作/测试我正在制作的模组。

在这样做的过程中,我正在处理一个最近的项目(更像是测试),它与屏幕有关。关于这个问题就够了。

所以我制作了一个文本字段,由于某种原因,当我输入时,其中的文本没有显示..
问题视频: https://streamable.com/ik7j79
代码 https://pastebin.com/8XtSGpWj

package battledash2.clientcommands.screens;

import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
import net.minecraft.client.minecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.*;
import net.minecraft.util.Formatting;

import java.util.logging.LogManager;

public class GuiScreen extends Screen {
    public GuiScreen(Text title) {
        super(title);
    }

    protected void init() {
        // init

        System.out.println("Loading Screen");
    }

    public void render(MatrixStack matrices,int mouseX,int mouseY,float delta) {
        matrices.push();
        renderBackground(matrices);

        /*
         * this.addButton(new ButtonWidget(this.width / 2 - 102,this.height / 4 + 24 + -16,204,20,new TranslatableText("menu.returnToGame"),(buttonWidgetx) -> {
         *          this.client.openScreen((Screen)null);
         *          this.client.mouse.lockCursor();
         *       }));
         */

        TextFieldWidget textfield = new TextFieldWidget(textRenderer,this.width / 2 - 102,new LiteralText("Chat message").setStyle(Style.EMPTY.withColor(Formatting.WHITE)));

        this.addButton(textfield);

        ButtonWidget submit = new ButtonWidget(this.width / 2 - 102,(this.height / 4 + 24 + -16)+(this.height / 4 + 24 + -16)+10,new LiteralText("Send chat message"),button->{
            String message = textfield.getText();

            minecraftClient.getInstance().openScreen((Screen) null);
            minecraftClient.getInstance().mouse.lockCursor();

            minecraftClient.getInstance().player.sendChatMessage(message);
        });
        this.addButton(submit);

        // drawTextWithShadow(matrices,textRenderer,new LiteralText("Chat message").setStyle(Style.EMPTY.withColor(Formatting.WHITE)),10,0xFFFFFFFF);

        matrices.pop();
        super.render(matrices,mouseX,mouseY,delta);
    }
}

解决方法

好的,所以我发现了问题。这是因为我将小部件放在“渲染”方法中。我创建了一个名为“initWidgets”的新方法,并在 main 方法中运行 initWidgets(),然后将小部件移动到“initWidgets”方法并且它起作用了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...