Java - setVisible (true) не влияет на GUI - PullRequest
3 голосов
/ 08 августа 2010

Я создал GUI (называемый ParameterUI) с помощью Netbeans GUI Builder, и теперь я хочу создать его экземпляр и отобразить его. Однако, используя

ParameterUI gui = new ParameterUI();
gui.setVisible(true);

не вызывает появления какого-либо окна ... Тестирование показывает, что после этих команд gui.isVisible () возвращает true, а gui.isValid () - false. Вызов gui.revalidate () также не имеет никакого эффекта.

В классе ParameterUI метод конструктора генерируется Netbeans и просто

public class ParameterUI extends javax.swing.JPanel {
    public ParameterUI() {
        initComponents();
    }
}

initComponents - это просто список того, где будет размещена каждая jPanel и т. Д.

Странно то, что когда я сделал учебный графический интерфейс с учебным пособием http://netbeans.org/kb/docs/java/gui-functionality.html, графический интерфейс был установлен в качестве основного класса, несмотря на отсутствие основного метода, и графический интерфейс появился сам по себе.

К сожалению, я новичок в GUI (я использую конструктор, потому что у меня нет времени, чтобы научиться делать правильный GUI ручной работы), но кто-то может сказать мне, как сделать мой GUI видимым? Я могу предоставить больше кода, если это необходимо ...

РЕДАКТИРОВАТЬ: я пытался

JFrame window = new JFrame();
ParameterUI gui = new ParameterUI();
window.setContentPane(gui);
window.pack();
window.setVisible(true);

прочитав короткое руководство по JFrames, но оно, похоже, ничего не меняет ...

Ответы [ 2 ]

3 голосов
/ 08 августа 2010

setVisible() для Компонента устанавливает флаг в этом компоненте (помимо прочего, вас это на самом деле не волнует).Этот флаг проверяется контейнером, содержащим ваш компонент, чтобы увидеть, нужно ли показывать компонент.

setVisible() в Окно определяет, будет ли окно отображаться на экране.Теперь все, что он делает, это заставляет ваше окно появляться или исчезать.Как правило, вы хотите дать ему некоторый размер и местоположение, прежде чем сделать его видимым.pack() и setLocationRelativeTo() полезны здесь.

Итак, чтобы увидеть ваш графический интерфейс, ParameterUI должен либо расширить Window (возможно, JFrame или JDialog), либо он должен содержаться вокно, и вы должны вызвать setVisible(true) в окне вместо ParameterUI экземпляра.Простой пример этого (непроверенный):

// expected to be called on the AWT/Event Dispatch Thread
public void show(ParameterUI ui) {
  JFrame frame = new JFrame();
  frame.setLayout(new BorderLayout());
  frame.add(ui, BorderLayout.CENTER);
  frame.pack();
  frame.setLocationRelativeTo(null); // position in the center of the screen
  frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  frame.setVisible(true);
}
1 голос
/ 08 августа 2010

Используете ли вы JFrame или вы создали приложение для настольных компьютеров с Netbeans?Потому что, если вы создали настольное приложение, у Netbeans есть собственный класс, который он использует, и у меня тоже было много проблем с ним ... поэтому я предлагаю вам использовать JFrame.В любом случае, вы можете попробовать это, чтобы увидеть, запускает ли пользовательский интерфейс:

SwingUtilities.invokeLater(new Runnable() {
           public void run()
           {
               ParameterUI gui = new ParameterUI();
               gui.setVisible(true);
           }
       });

Поскольку вы расширяете JPanel, вам нужно поместить панель на JFrame, чтобы она была видимой.Для этого в netbeans просто создайте новый JFrame (щелкните правой кнопкой мыши по пакету и выберите «Новый JFrame». Теперь вернитесь на свою панель, на левом поле (в разделе «Проект», «Файлы» и т. Д.) У вас должен быть элементс именем «Инспектор». Нажмите на него, и вы увидите древовидное представление ваших компонентов. Щелкните правой кнопкой мыши на JPanels, которые вы хотите видеть, и выберите «Копировать». Вернитесь к только что созданному JFrame, найдите кнопку «Инспектор»от левого поля нажмите на него, и сверху у вас должен быть элемент с именем «[JFrame]». Щелкните правой кнопкой мыши на этом элементе и выберите «Вставить». Теперь вы должны увидеть созданную вами панель.

Для просмотраЗатем на панели просто введите имя JFrame вместо ParameterUI

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