allelopath
asked on
JTable & scroll pane to stretch to fill the panel
How do I get the table & scroll pane to stretch to fill the panel as it is resized?
(Resized using the mouse).
(Resized using the mouse).
package tableStretch;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableModel;
/**
* JPanel with JTable
*/
public class MyPanel extends JPanel {
private JTable jTable;
private DefaultTableModel defaultTableModel;
private String[] columnNameArray = {"One", "Two", "Three"};
private Object[][] dataArray = {
{ "", "", ""},
{ "", "", ""},
{ "", "", ""},
{ "", "", ""},
};
/**
* constructor
*
*/
public MyPanel () {
super();
defaultTableModel = new DefaultTableModel(dataArray, columnNameArray);
jTable = new JTable (defaultTableModel);
setLayout();
setListeners();
}
/**
* set layout of components
*/
public void setLayout() {
jTable.setFillsViewportHeight(true);
JScrollPane jScrollPane = new JScrollPane(jTable);
jScrollPane.getViewport().setPreferredSize(jTable.getPreferredSize());
Border loweredbevel = BorderFactory.createLoweredBevelBorder();
jScrollPane.setBorder(loweredbevel);
jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
this.add(jScrollPane, BorderLayout.CENTER);
}
/**
* set listeners
*/
public void setListeners() {
}
/**
* @return defaultTableModel
*/
public DefaultTableModel getDefaultTableModel() {
return defaultTableModel;
}
/**
*
* @param defaultTableModel
*/
public void setDefaultTableModel(DefaultTableModel defaultTableModel) {
this.defaultTableModel = defaultTableModel;
jTable.setModel(defaultTableModel);
}
/**
*
* @param args
*/
public static void main(String[] args) {
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e){
e.printStackTrace();
}
final MyPanel jPanel = new MyPanel();
final JFrame frame = new JFrame();
frame.add(jPanel, BorderLayout.CENTER);
frame.setTitle("My Panel");
// frame.setPreferredSize(new Dimension(500, 250));
frame.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
}
});
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setLocation(300, 200);
frame.pack();
frame.setVisible(true);
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
A little more info: If you don't call setLayout(someLayoutManage r), the default layout for a container is FlowLayout.