Java - setVisible(true) не влияет на GUI
Я создал 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 ручной работы), но может кто-нибудь сказать мне, как сделать мой GUI видимым? Я могу предоставить больше кода, если это необходимо...
РЕДАКТИРОВАТЬ: я пытался
JFrame window = new JFrame();
ParameterUI gui = new ParameterUI();
window.setContentPane(gui);
window.pack();
window.setVisible(true);
прочитав короткое руководство по JFrames, но оно, похоже, ничего не меняет...
2 ответа
Используете ли вы JFrame или вы создали приложение для рабочего стола с Netbeans? Потому что, если вы создали настольное приложение, у Netbeans есть собственный класс, который он использует, и у меня также было много проблем с ним... поэтому я предлагаю вам использовать JFrame. В любом случае, вы можете попробовать это, чтобы увидеть, запускает ли пользовательский интерфейс:
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
ParameterUI gui = new ParameterUI();
gui.setVisible(true);
}
});
Поскольку вы расширяете JPanel, вам нужно поместить панель на JFrame, чтобы она была видна. Для этого в netbeans просто создайте новый JFrame (щелкните правой кнопкой мыши по пакету и выберите "New JFrame"). Теперь вернитесь на свою панель, на левом поле (в разделе "Проект", "Файлы" и т. Д.) У вас должен быть элемент с именем "Инспектор". Нажмите на него, и вы увидите древовидное представление ваших компонентов. Щелкните правой кнопкой мыши на JPanels, которые вы хотите видеть, и выберите "Копировать". Вернитесь к только что созданному JFrame, найдите кнопку "Инспектор" с левого поля щелкните по нему, и сверху у вас должен появиться элемент с именем "[JFrame]". Щелкните правой кнопкой мыши по этому элементу и выберите "Вставить". Теперь вы должны увидеть созданную вами панель.
Чтобы просмотреть панель, просто введите имя JFrame вместо ParameterUI
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);
}