Pomoc w umieszczeniu JPanel'a w JScrollPane

0

Witam

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.david;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
 *
 * @author Dawid
 */
public class MakeGUI 
{
    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable() 
        {
            @Override public void run() 
            {
                PhoneBookFrame pbf = new PhoneBookFrame();
                pbf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                pbf.setVisible(true);
            }
        });
    }
}

//Głowna ramka
class PhoneBookFrame extends JFrame
{
    public PhoneBookFrame()
    {
        setSize(300,300);        
        PhoneBookPanel panel = new PhoneBookPanel();     
        panel.setPreferredSize(new Dimension(100,100));
        JScrollPane pane = new JScrollPane();
        pane.getViewport().add(panel); 
        
        add(pane,BorderLayout.NORTH);
        add(new JButton("Dodaj"),BorderLayout.SOUTH);
    }
}

//Panel z numerami telefonow. Uzywamy GBC

class PhoneBookPanel extends JPanel
{
    public PhoneBookPanel()
    {        
        setSize(100,100);
        setLayout(new GridBagLayout());
        add(new JLabel("Imie"),new GBC(0,0).setFill(GBC.NONE).setWeight(100,0).setAnchor(GBC.CENTER));
        add(new JLabel("Nazwisko"),new GBC(1,0).setFill(GBC.NONE).setWeight(100,0).setAnchor(GBC.CENTER));
        
        for(int i=1;i<20;i++)
        {
            add(new JLabel("xxx"),new GBC(0,i));
            add(new JLabel("12345"),new GBC(1,i));
        }        
        
    }
}



Otóż dodanie panela do JScrollPane nic nie daje. Nie ma żadnych suwaków. A komponent wraz z dodawaniem etykiet sam się rozszerza.

0

Zamiast

        JScrollPane pane = new JScrollPane();
        pane.getViewport().add(panel);

jedna instrukcja

JScrollPane pane = new JScrollPane(panel);
0

Tak też probowałem. Nie działa

0
PhoneBookPanel panel = new PhoneBookPanel();    
        
        JScrollPane pane = new JScrollPane(panel);                 
        add(pane,BorderLayout.NORTH);
        add(new JButton("Dodaj"),BorderLayout.SOUTH);

tak ma być?

0

Tak może być. Suwaki pojawia się gdy będą potrzebne. Jeśli chcesz je mieć zawsze, to (dla suwaka poziomego):

pane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

1 użytkowników online, w tym zalogowanych: 0, gości: 1