• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2629
  • Last Modified:

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).
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);

	}

}

Open in new window

0
allelopath
Asked:
allelopath
  • 2
1 Solution
 
jlar310Commented:
in setLayout() add

this.setLayout(new BorderLayout());

You need to give each panel a layout manager before the contraints in the add() calls have any meaning.
0
 
jlar310Commented:
A little more info: If you don't call setLayout(someLayoutManager), the default layout for a container is FlowLayout.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now