Имам следния сценарий: JFrame, който съдържа няколко JPanels, които са избрани с помощта на CardLayout. Един JPanel съдържа доста голяма JTable, която увих в JScrollPane и добавих JScrollPane към основния JPanel:
package com.javaswingcomponents.demo;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class MyPanel extends JPanel {
private DefaultTableModel model = new DefaultTableModel();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setBounds(100, 100, 450, 535);
frame.getContentPane().add(new MyPanel());
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MyPanel() {
JTable table = new JTable(model);
JScrollPane scrollPaneParte = new JScrollPane(table);
scrollPaneParte.setPreferredSize(new Dimension(600, 600));
scrollPaneParte.setBounds(10, 92, 867, 92);
add(scrollPaneParte);
scrollPaneParte.setViewportView(table);
addColumns(model);
}
public void addColumns(DefaultTableModel model) {
for (int ii=0;ii<10;ii++)
model.addColumn("Field"+ii);
}
}
Първоначално си помислих, че проблемът е в използваното XY (нулево) оформление, но дори при промяна на BorderLayout нищо не се случва, тоест ScrollBar не се показва и се показва само част от JTable.
Някаква идея как да се реши този проблем?
РЕДАКТИРАНЕ: Включих пълен работещ пример, който възпроизвежда проблема.