ScrollPane automatyczny rozmiar

0

W pisaniu kodu spotkałem pewien problem i napisałem nawet jeszcze raz malutki kawałek, by stwierdzić czy czegoś nie namieszałem wcześniej, jednak to nic nie dało:

public class s extends JFrame{

    public static void main(String[] args) {
        new s();
    }

    s(){
        setSize(600, 400);

        JPanel jp = new JPanel(new FlowLayout());
        ScrollPane sp = new ScrollPane();
        JTextArea ta = new JTextArea();

        add(jp);
        jp.add(sp);
        sp.add(ta);

        ta.setPreferredSize(new Dimension(250, 300));

        setVisible(true);
    }

}

ScrollPane automatycznie nie zmienia swojego rozmiaru rozpychając się na maksa w JPanel, a powinien. Oczywiście mogę skorzystać z setPreferredSize dla ScrollPane, ale nie chcę bo ma się on sam dopasowywać do JPanelu, który się dopasuje do rozmiaru okna.

Efekt tego kodu: https://dl.dropbox.com/u/102323506/sp.png

2

Nie mieszaj komponentów z różnych bibliotek, rozmiar pola tekstowego podawaj raczej w "znakach", nie w pikselach. Spróbuj tak:

public class s extends JFrame{

        public static void main(String[] args) {
                new s();
        }

        s(){
                setSize(600, 400);

                JPanel jp = new JPanel(new FlowLayout());
                JTextArea ta = new JTextArea(15,40);
                JScrollPane sp = new JScrollPane(ta);

                add(jp);
                jp.add(sp);

                //ta.setPreferredSize(new Dimension(250, 300));

                setVisible(true);
        }

}
0

Dzięki, tyle razy tego używałem a tym razem dwukrotnie użyłem ScrollPane, którego wcześniej nie używałem, zawsze JScrollPane i jeszcze jedna rzecz, że w konstruktorze lepiej chyba podawać komponent.

Aż głupio, że tego nie zauważyłem, ale tak czasem bywa i pewnie jeszcze sporo czasu bym na szukanie błędu poświęcił.

1

Nie musisz podawać komponentu w konstruktorze, ale odpowiednikiem

JScrollPane = new JScrollPane(ta);

jest

JScrollPane = new JScrollPane();
sp.setVieportView(ta);

Nigdy nie wywołałem metody add na rzecz obiektu typu JScrollPane, nie mam pojęcia do czego by się to mogło przydać.

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