Апплет работает, но компоненты качелей не появятся! - PullRequest
0 голосов
/ 11 июня 2009

Итак, я создаю этот апплет, в котором я хочу иметь все компоненты Swing. Я просмотрел все документы, создал апплет, и я могу получить что-то, что можно показать в нем, если я переопределю метод update(Graphics g), но простое добавление компонентов к contentPane, похоже, не делает этого ! Что я делаю не так?

import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import org.steephill.kindlab.LabApp;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class ClientApplet extends JApplet {

    ClientTreePanel treePanel;

    public void destroy() {
        // Put your code here
    }

    public String getAppletInfo() {
        return "KindLab Client Applet";
    }

    public void init() {

        try {
            LabApp.initializeHibernate();
            if (!LabApp.authenticate("user", "pass")) {

                JOptionPane.showMessageDialog(this, "authentication failed");
            } else {

                try {
                    javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
                        public void run() {
                            createGUI();
                        }
                    });
                } catch (Exception e) {
                    System.err.println("createGUI didn't successfully complete");
                }

                    }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "error intitializing applet\r\n" + ex.getMessage());
        }
    }

    protected void createGUI() {

        treePanel = new ClientTreePanel();
        treePanel.setVisible(true);
        getContentPane().add(new JLabel("TESTING!"));
        getContentPane().add(treePanel);

        System.out.println("THIS DOES RUN");
    }

    public void start() {
        // Put your code here
    }

    public void stop() {
        // Put your code here
    }

    /*  if I uncomment this method, it WORKS and I get "Hello World!"
    public void paint(Graphics g) {
        super.paint(g);
        g.drawString("Hello World!",25,25);
    }
     */
}

Пожалуйста, помогите! И благодарю вас! Joshua

Ответы [ 3 ]

2 голосов
/ 11 июня 2009

Я вижу несколько проблем с вашим кодом здесь:

  1. вы не вызываете pack () в конце настройки GUI
  2. Вы добавляете несколько компонентов на панель содержимого апплета, но без каких-либо ограничений макета. Панель содержимого по умолчанию обычно представляет собой BorderLayout, поэтому добавление двух компонентов без каких-либо ограничений, вероятно, только поместит ClientTreePanel сверху.

Поскольку вы не вызываете pack (), компоновка не будет рассчитана, что в вашем случае, вероятно, приведет к тому, что ничего не будет отображаться (вы не предоставили код для ClientTreePanel).

1 голос
/ 23 мая 2011

Попробуйте удалить свой метод рисования, и вы увидите, что он работает. Проблема может заключаться в том, что, поскольку у вас есть метод рисования, все изменения вносятся через него. Это странно, потому что он отображает JButton.

1 голос
/ 11 июня 2009

Вы не должны иметь для вызова пакета () - раскладка будет рассчитана, когда компонент впервые реализуется, что происходит при вызове пакета - но также и когда компонент впервые становится видимым. *

«Добавление компонентов без ограничений» находится на правильном пути - вы должны изменить код добавления компонентов на панель содержимого:

getContentPane().add(new JLabel("TESTING!"), BorderLayout.NORTH);
getContentPane().add(treePanel, BorderLayout.CENTER);

Другая проблема заключается в том, что ваш компонент ClientTreePanel не отображается - это может быть проблема с размерами, компоновкой или другими вещами - но без просмотра этого кода это будут только предположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...