2016-05-17 3 views
0

Недавно я начал изучать Java и адам, написав gui для листинга персонажа для личного использования. Я верю, что у меня все готово к работе, но я не могу проверить его за пределами консоли, потому что я не могу заставить графический интерфейс отображать что-либо, кроме серого окна.Панели, не добавляемые в GUI

У меня есть основной класс, который создает JFrame и вызывает конструкторы для моих других классов символов для выполнения всей работы, но по какой-то причине в графическом интерфейсе ничего не отображается. Я не получаю никаких ошибок или чего-то еще, и я потратил несколько часов на поиск возможных решений безрезультатно.

Мой код: Основной метод:

public static void main(String[] args) throws IOException 
{ 
    JFrame main = new JFrame(); 
    JMenuBar menu = new MenuBar(); 
    JPanel character = new CreatorGUI(); 


    main.getContentPane().add(character); 
    main.add(menu); 
    main.setJMenuBar(menu); 
    main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    main.setSize(10000, 10000); 
    main.pack(); 
    main.setVisible(true); 
} 

CreatorGUI:

public CreatorGUI() throws IOException 
{ 
    JPanel container = new JPanel(); 
    JPanel stats = makeStats(); 
    JPanel mods = makeMods(); 
    JPanel character = makeChar(); 

    container.add(mods); 
    container.add(stats); 
    container.add(character); 
    add(container); 
} 

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

Любая помощь очень ценится!

ответ

2
main.getContentPane().add(character); 
main.add(menu); 
main.setJMenuBar(menu); 

Использование main.getContentPane().add(...) такое же, как main.add(...). Это компонент добавляется в область содержимого.

Менеджером по умолчанию JFrame является BorderLayout.

Если вы не указали ограничение, компонент добавляется к CENTER. Однако только один компонент может быть добавлен к CENTER, поэтому «меню» заменяет панель «символ».

Избавьтесь от заявления main.add(menu). Его следует добавлять только в строку меню, поэтому вам нужно использовать только метод setJMenuBar(...).

+0

Это работало. Спасибо1 –

0

Самый подозрительный метод вызова - setSize, который принимает высоту и ширину пикселя. 10000, вероятно, слишком велико, как ширина и высота, и поэтому вы можете видеть только часть того, что вы пытаетесь отобразить. Изменение его на что-то вроде 800 x 800 может позволить вам увидеть новые вещи.

Смежные вопросы