JTable - problem z pracą JScrollPane

0

Hej,

Mam sobie taki panel:

AdminPanel.jpg

Dane w tabeli są pobierane przy odpalaniu całego okna z bazy SQL. Chciałbym jednak, by kolumny miały np. określoną startową wartość i jeżeli zawartość w wierszach jest większa, to żeby zaczął działać JScrollPane i pojawił się suwak horyzontalny.

To jest kod, którym pakuję dane do tabeli i którym w gruncie rzeczy maluję tabelkę:

table = new JTable();
table.setFont(new Font("Dialog", Font.PLAIN, 11));
scrollPane.setViewportView(table);
		
// TODO: Populate table with data from SQL database
String sql = "SELECT * FROM admindatabase";
try
{
	ps = conn.prepareStatement(sql);
	rs = ps.executeQuery();
			
	ResultSetMetaData rsmetadata = rs.getMetaData();
			
	//It stores the number of columns
	int columns = rsmetadata.getColumnCount();
			
	//This object will pass data into JTable
	DefaultTableModel dtm = new DefaultTableModel();
	Vector columns_name = new Vector();
	Vector data_rows = new Vector();
			
	for (int i=1; i<=columns; i++)
	{
		columns_name.addElement(rsmetadata.getColumnName(i));
	}
	dtm.setColumnIdentifiers(columns_name);
			
	while (rs.next())
	{
		data_rows = new Vector();
		for (int j=1; j<=columns; j++)
		{
			data_rows.addElement(rs.getString(j));
		}
		dtm.addRow(data_rows);
	}
	//Pass DefaultTableObject into table
	table.setModel(dtm);
			
}
catch (SQLException e)
{
	e.printStackTrace();
}

Zastanawiam się jak rozwiązać kwestię zaangażowania JScrollPane do działania po wsadzeniu w niego tabelki.

Będę wdzięczny za wszelką pomoc.

Pozdrawiam!

2

Szerokość kolumn i tabeli możesz ustawić tak:

int width=0;
//pętla po kolumnach
{
     int w = ...;
     td = tabela.getColumn(...);
     td.setPreferredWidth(w);
     width+=w;
}

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

To jednak nie rozwiązuje problemu nie reagującego odpowiednio JScrollPane'a. Mimo ustawień powiedzmy:

for (int k=0; k<columns; k++)
{
	table.getColumnModel().getColumn(k).setMinWidth(60);
}

...to mimo zmniejszania okna ręcznie JScrollPane się kurczy, ale z tym kurczeniem się nie pojawiają się suwaki, gdy tabela znika za "ramką" okna. Oczywiście mam ustawione suwaki horizontal i vertical na "as needed".

EDIT

Temat do zamknięcia. To co należało zrobić, by wymusić pojawienie się scroll barów, to:

table.setAutoResizeModel(JTable.AUTO_RESIZE_OFF);

Dzięki za odpowiedź @bogdans :)

Pozdrawiam!

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