Libgdx: لا يفقد TextField التركيز عند النقر فوق SelectBox وتوسيعه.

تم إنشاؤها على ٢٨ يوليو ٢٠١٤  ·  3تعليقات  ·  مصدر: libgdx/libgdx

نظام التشغيل: Windows 8.1، x64
الإصدار: 1.2.0
الهدف: سطح المكتب فقط (لم يتم اختباره على الأنظمة الأساسية الأخرى)

عندما أقوم بالنقر فوق SelectBox لإظهار القائمة المنسدلة ؛ يجب أن يفقد حقل النص في خلية الجدول المجاورة التركيز ، لكنه لا يفقد. تشترك هذه المكونات في جدول ومرحلة. المرحلة المتبادلة تعالج المدخلات.

هذا لا يكسر أي شيء حقًا ، ولكنه سلوك غير مرغوب فيه ويمكن أن يجعل اللعبة تبدو غير احترافية ، تمامًا.

الكود ذي الصلة المراد إعادة إنتاجه:

    import com.badlogic.gdx.scenes.scene2d.ui.*;

    final Label titleLabel = new Label(
            "Title: ", skin, "heading");

    final Label typeLabel = new Label(
            "Type: ", skin, "heading");

    final TextField textField = new TextField("", skin);

    final SelectBox<String> contextSelector = new SelectBox<String>(skin);
    contextSelector.setItems("Weapon", "Tool", "Crop", "Machine", "World Rule");

    table.row();
        table.add(titleLabel).right();
        table.add(textField).fill().prefWidth(Gdx.graphics.getWidth() / 5.0f).space(1.0f);
    table.row();
        table.add(typeLabel).right();
        table.add(contextSelector).fill().prefWidth(Gdx.graphics.getWidth() / 5.0f).space(1.0f);
    table.row().height(15.0f); table.add().fill();
    table.row();
        table.add(placeHolderLabel1);
        table.add(startButton).right();

التعليق الأكثر فائدة

لست متأكدًا من أنك تريد دائمًا أن يفقد TextField التركيز عند النقر على ممثل آخر. يمكنك تخصيص السلوك بنفسك بسهولة:

stage.getRoot().addCaptureListener(new InputListener() {
    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
        if (!(event.getTarget() instanceof TextField)) stage.setKeyboardFocus(null);
        return false;
    }
}

ال 3 كومينتر

لست متأكدًا من أنك تريد دائمًا أن يفقد TextField التركيز عند النقر على ممثل آخر. يمكنك تخصيص السلوك بنفسك بسهولة:

stage.getRoot().addCaptureListener(new InputListener() {
    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
        if (!(event.getTarget() instanceof TextField)) stage.setKeyboardFocus(null);
        return false;
    }
}

حسنًا ، هذا بالتأكيد يحل المشكلة. هتافات. :-)

مرة أخرى وجدت حلاً أنيقًا لمشكلتي. مشهد 2d رائع :)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات