Java: ярлык AWT не отображается - PullRequest
0 голосов
/ 02 марта 2012

Довольно простая проблема. Мой ярлык Java AWT (не Swing) просто не отображается. Большая часть следующего кода даже не используется (для устранения этой проблемы).

Просто примечание: это внутри конструктора фрейма (и да, я добавил несколько других панелей и таких, которые отлично работают). Во-вторых, макет фрейма был установлен на null.

Я в тупике.

File inf = new File("instructions.txt");
        Label ilb;
        if(inf.exists())
        {
            Log.v("Loading instructions");

            try
            {
                FileInputStream fis = new FileInputStream(inf);
                byte[] insb = new byte[65535];
                fis.read(insb);
                fis.close();
                String inst = new String(insb);
                ilb = new Label("test", Label.LEFT);
                File fntfile = new File("font/pf_tempesta_seven.ttf");
                Font infnt = null;
                try {
                    FileInputStream ffis = new FileInputStream(fntfile);
                    infnt = Font.createFont(Font.TRUETYPE_FONT, ffis);
                    ffis.close();
                } catch (FontFormatException e) {
                    Log.e("Could not format LCD font!", e);
                } catch (IOException e) {
                    Log.e("Could not read LCD font file!", e);
                }

                if(infnt == null)
                    infnt = new Font("Trebuchet MS", Font.PLAIN, 8);
                else
                    infnt = infnt.deriveFont(8.0f);

                //ilb.setFont(infnt);
                //ilb.setForeground(new Color(123, 123, 123));

                //ilb.setPreferredSize(new Dimension(350, 400));
                //ilb.setSize(350, 400);

                //ilb.setLocation(580, 190);

                Log.d("adding label");
                add(ilb);

            } catch(IOException e) {
                Log.e("Could not read instructions!", e);
            }
        }else
            Log.w("Instructions file not found!");

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Как подсказал @JBNizet, макеты null не работают со всеми компонентами AWT.

Я был сброшен, поскольку мои Panel были очень хорошо размещены с макетом null на моем Frame, тогда как для меток требуется базовая раскладка для отображения.У меня было искушение пойти так далеко, чтобы сказать, что все другие компоненты имеют ту же «особенность», но другая часть моего кода доказала, что эта точка неверна:

// Load Image
        Log.v("Loading header image");
        _iBG = new ImageIcon("img/hpcount_top_bg.png").getImage();

        // Set size
        setSize(1024, 152);
        setPreferredSize(new Dimension(1024, 152));

        // Set position
        setLocation(0, 0);

        // Set visible
        setVisible(true);

        // Set layout
        setLayout(null);

        // Add children
        add(new Exit()); // Exit extends java.awt.Button

Код выше (который находится внутри конструкторакласс, расширяющий java.awt.Panel), работает отлично.

Мой обходной путь - поместить метку внутри другого Panel с макетом (грязно, но он работает) и расположить эту панель внутри Frame абсолютно для достижениятот же эффект.

1 голос
/ 02 марта 2012

1) для современного графического интерфейса используйте Swing JComponents (начинается с J), а не доисторический AWT Label

2) для вашей проблемы лучше использовать JTextArea с методом append()

3) у вас проблемы с Concurency (в Swing) AWT / Swing однопоточный, и весь вывод в GUI должен быть заключен в invokeLater

4) для лучшей помощи, как только вы отредактируете свой вопрос с помощью SSCCE

...