2013-07-17 8 views
0

Я пытаюсь добавить JLabel в JPanel для JFrame. Я установил границу для JPanel, но все, что я вижу на JFrame, - это маленький черный квадрат в центре моего кадра. Что бы я ни делал, я не могу изменить размер или местоположение. Пожалуйста помоги.Добавление JPanel в JFrame?

Start main = new Start(); 
    Random random = new Random(); 

    JFrame mainFrame = new JFrame("MainFrame"); 
    JPanel mainPanel = new JPanel(); 
    JLabel welcomeLabel = new JLabel(); 

    mainFrame.add(main); 
    mainFrame.setLayout(new GridBagLayout()); 
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    mainFrame.setTitle(names[random.nextInt(names.length)]); 
    mainFrame.pack(); 
    mainFrame.setVisible(true); 
    mainFrame.setSize(mainFrameX, mainFrameY); 
    mainFrame.setResizable(false); 
    mainFrame.setLocationRelativeTo(null); 
    mainFrame.add(mainPanel); 

    mainPanel.add(welcomeLabel); 
    mainPanel.setBorder(new LineBorder(Color.BLACK)); 
    mainPanel.setSize(new Dimension(200, 200)); 

    welcomeLabel.setFont(new Font("Verdana", 1, 20)); 
    welcomeLabel.setLocation(100, 100); 

    main.start(); 

ответ

2

Предложения:

  • Вы хотите прочитать учебник, Laying out Components, как он объяснит, как код с менеджерами компоновки Качели, и эта информация имеет важное значение для решения текущей проблемы.
  • Одно предостережение: я призываю вас избегать искушения использовать нулевой макет, поскольку его использование приведет к созданию кода, который очень сложно поддерживать или обновлять.
  • Ваш JLabel, welcomeLabel, конечно, понадобится, чтобы текст был видимым.
  • Не устанавливайте его через setLocation (...), но снова используйте менеджеров компоновки, чтобы выполнить грязную работу по размещению и калибровке ваших компонентов.
  • Вы также захотите вызвать pack() и setVisible (true) на вашем JFrame после добавления всех исходных компонентов.
0

Hovercraft является правильным (+1), убедитесь, что вы понимаете, как работают менеджеры макета.

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

Start main = new Start(); 
Random random = new Random(); 

JFrame mainFrame = new JFrame("MainFrame"); 
JPanel mainPanel = new JPanel(); 
JLabel welcomeLabel = new JLabel();  

welcomeLabel.setFont(new Font("Verdana", 1, 20)); 

mainPanel.add(welcomeLabel); 
mainPanel.setBorder(new LineBorder(Color.BLACK)); 

// Do this first 
mainFrame.setLayout(new GridBagLayout()); 
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
mainFrame.setTitle(names[random.nextInt(names.length)]); 

// Add your components 
mainFrame.add(main); 
mainFrame.add(mainPanel); 

// Prepare the window for showing, now you have some content. 
mainFrame.setResizable(false); 
mainFrame.pack(); 
mainFrame.setVisible(true); 
mainFrame.setLocationRelativeTo(null); 

main.start(); 

Это будет по-прежнему производит только маленький черный квадрат в окне, потому что JLabel не имеет и поэтому предпочтительный размер будет (что-то вроде) 2x2 (из-за границы).

Попробуйте добавить текст к ...

welcomeLabel.setText("Welcome"); 

А потом увидеть разницу

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