2014-12-11 17 views
0

У меня есть JFrame, к которому я добавляю собственный класс JPanel. Этот класс JPanel имеет две переменные-члены, другую JPanel и JScrollPane.JPanel внутри JScrollPane внутри JPanel внутри JFrame

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

У меня есть большая тонкая белая линия infront всех моих компонентов, и их нет прокрутки. Есть идеи?

public class CreateGamePanel extends JPanel 
{ 
    private JLabel pwLabel; 
    private JTextField password; 

    private JScrollPane jsp; 
    private JPanel area; 

    public CreateGamePanel() 
    { 
     area = new JPanel(); 
     area.setLayout(new BoxLayout(area,BoxLayout.Y_AXIS)); 

     jsp = new JScrollPane(area); 

     pwLabel = new JLabel("Password"); 
     password = new JTextField(); 

     for(int i=0;i<20;i++) 
     { 
      area.add(new JButton("Hello")); 
     } 

     area.add(pwLabel); 
     area.add(password); 

     add(jsp); 
    } 

    public static void main(String[] args) 
    { 
     JFrame f = new JFrame(); 

     CreateGamePanel cp = new CreateGamePanel(); 

     f.add(cp); 
     f.setSize(500,500); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 

    } 
} 

ответ

1

политика по умолчанию полосы прокрутки в JScrollPane является только показать, когда размер компонента ребенка не помещается внутри панели. Что происходит в вашем коде, так это то, что родительский JScrollPane является игровой панелью и автоматически изменяется, чтобы содержать весь JScrollPane и его дочерний элемент вместо того, чтобы быть вмонтированным в доступное пространство в JFrame. Для этого вам нужно только уточнить настройки макетов.

Попробуйте этот код, например:

public class CreateGamePanel extends JPanel { 
    private JLabel pwLabel; 
    private JTextField password; 

    private JScrollPane jsp; 
    private JPanel area; 

    public CreateGamePanel() 
    { 
     area = new JPanel(); 
     area.setLayout(new BoxLayout(area,BoxLayout.Y_AXIS)); 

     jsp = new JScrollPane(area); 

     pwLabel = new JLabel("Password"); 
     password = new JTextField(); 

     for(int i=0;i<20;i++) 
     { 
      area.add(new JButton("Hello")); 
     } 

     area.add(pwLabel); 
     area.add(password); 

     setLayout(new BorderLayout()); // Change default LinearLayout to BorderLayout 
     add(jsp, BorderLayout.CENTER); // Add child to the central area of BorderLayout 
    } 

    public static void main(String[] args) 
    { 
     JFrame f = new JFrame(); 

     CreateGamePanel cp = new CreateGamePanel(); 

     f.add(cp, BorderLayout.CENTER); // Make sure the game panel will be resized to fit frame 
     f.setSize(500,500); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 

    } 
} 

Хитрость здесь в том, что содержание в BorderLayout.CENTER части BorderLayout изменяют свои размеры, чтобы соответствовать доступное пространство родителя.

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