JTable w JScrollPane, a rozmiar JFrame.

0

Cześć.

Mam taki problem: tworzę sobie tabele i opakowuję ją JScrollPane'em, po czym dodaję ją do contentPane utworzonego wcześniej JFrame, oto kod:

package testy;

import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Main {
	public static void main(String[] args) {
		JFrame f = new JFrame();
		JTable t = new JTable(6, 6);
		JScrollPane sp = new JScrollPane(t);
		Container cp = f.getContentPane();
		
		cp.add(sp);
		
		f.pack();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
}

Po spakowaniu okna i wyświetleniu go na ekranie, pod tabelą widzę pustą przestrzeń (wysokość ~2x tabela), dlaczego tak się dzieje?Próbowałem inaczej i gdy nie dodałem tabeli do ScrollPane to okno ładnie opakowuje całą tabele.

0

wszystko jest ok, dajesz pack() to java dopasowuje rozmiar okna do domyślnej wartości komponentu, widocznie taki jaki otrzymujesz jest domyślny dla scrollpane. Zwiększ pierwszy parametr przy tworzeniu JTable (liczba wierszy) - okno się nie zwiększy, tylko 'tabela zajmie więcej miejsca', jeżeli przekroczysz w tej liczbie wysokość okna, scrollpane da o sobie znać. Aby zmniejszyć rozmiar okna... po prostu go zmień :)

(...)
f.setVisible(true);
f.setSize(500,100); //przykład
(...)

pozdrawiam

0

No racja jest tak jak piszesz. A dlaczego nic nie daje takie coś:

sp.setSize(t.getSize());

//dodanie do cp, f.pack(), itd...

Teoretycznie powinno ustawić rozmiar sp na rozmiar taki jak ma tabela.

0

to będzie lekki strzał, ale tyle o ile się spotykałem z JTable, to coś by mi mówiło, że 'liczba wierszy i kolumn nie określa rozmiarów tabeli'. Jeżeli zrobisz jedną kolumnę, będzie ona rozciągnięta na całą szerokość JTable, nie określisz w ten sposób szerokości tabeli. Spróbuj najpierw ustawić rozmiar tabeli, a potem zastosować to co napisałeś.

0

coś nie bardzo to działa... ani metoda setSize, ani setPreferredSize nie zmienia rozmiaru ScrollPane. (próbowałem też ze zmianą rozmiaru tabeli)

chociaż przy zmianie menadżera rozkładu rozmiar scrollPane się zmienił, więc będę coś próbował, a w końcu się uda :)

0

Zapewne można prościej, ja szerokość tabeli ustawiam tak:

       int width=0;
       // pętla po kolumnach 
        td.setPreferredWidth(szerokoscKolumny);
        width+=szerokoscKolumny;

        tabela.doLayout();
        Dimension d=tabela.getPreferredScrollableViewportSize();
        d.width=width;
        tabela.setPreferredScrollableViewportSize(d);
0

PreferredScrollableViewportSize - o ten rozmiar się rozchodziło, teraz jest wszystko ok. Dzięki za pomoc.

Mój problem załatwia:

t.setPreferredScrollableViewportSize(t.getPreferredSize());

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