2016-09-10 2 views
0

Ниже приведен мой код. Я не могу добавить все 6 кнопок. Одновременно отображаются только кнопки 1 - 3 или кнопки 4-6.Невозможно отобразить все кнопки на JFrame

Просьба сообщить мне, где я ошибаюсь.

// This class contains the main method and launches the Main screen 
import javax.swing.*; 
import java.awt.*; 

public class LearningHome{ 
    public static void main(String[] args){ 
     JFrame mainFrame = new JFrame("Welcome to the Learning! "); 

     try { 

     mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainFrame.setSize(800, 800); 
     mainFrame.setVisible(true); // Without this property the frame will not be visible 

     FlowLayout mainLayout = new FlowLayout(); 
     JPanel mainPanel = new JPanel(); 

     mainPanel.setLayout(mainLayout); 

     mainPanel.add(new JButton(" Button 1 ")); 
     mainPanel.add(new JButton(" Button 2 ")); 
     mainPanel.add(new JButton(" Button 3 ")); 

     JPanel subPanel = new JPanel(); 

     subPanel.setLayout(mainLayout); 

     subPanel.add(new JButton(" Button 4 ")); 
     subPanel.add(new JButton(" Button 5 ")); 
     subPanel.add(new JButton(" Button 6 ")); 

     mainFrame.add(mainPanel, mainLayout.LEFT); 
     mainFrame.setLocationRelativeTo(null); 
     mainFrame.add(subPanel, mainLayout.RIGHT); 
    } 
} 

ответ

4

Вы не упомянули, точное расположение, которую вы ищете, и существует широкий ряд способ пойти об организации компонентов, но для решения ваших конкретных замечаний

Я не могу добавить все 6 кнопок. Только Button1 -.. 3 или Button4-6 становятся одновременно отображаемых

  1. Добавить все элементы в JFrame, прежде чем он становится видимым (например, переместить mainFrame.setVisible(true) после добавления компонентов в mainFrame Таким образом LayoutManager может организовать компоненты по мере необходимости
  2. Рассмотрим вызова mainFrame.pack(); до вызова setVisible (см What does .pack() do?)
  3. в умолчанию LayoutManager для панели содержимого в JFrame является BorderLayout (по умолчанию для JPanel - FlowLayout - поэтому нет необходимости явно устанавливать макет как таковой) ... если вы хотите добавить две панели, чтобы они располагались в строке, рассмотрите возможность использования соответствующей комбинации параметров BorderLayout.

Например:

mainFrame.add(mainPanel, BorderLayout.WEST); 
mainFrame.add(mainPanel, BorderLayout.EAST); 
mainFrame.pack();//call these methods after adding components 
mainFrame.setVisible(true); 

Вы можете альтернативно укладывать их в две строки, используя соответствующие параметры BorderLayout. Например:

mainFrame.add(mainPanel, BorderLayout.CENTER); 
mainFrame.add(mainPanel, BorderLayout.SOUTH); 
+0

PACK был хорошим вариантом. Но при этом моя страница становится сжатой, что мне не нужно. Кроме того, я реализовал все. Ваше объяснение было потрясающим. Огромное спасибо. –

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