私の問題は次のとおりです。JScrollPaneをウィンドウに合わせてサイズ変更し、水平方向に特定のサイズまでサイズ変更しようとしています。ウィンドウで拡大しようとするのをやめるべきです。
GridBagLayout でそれを行うことはできますか? もしそうなら、どのように?
私の問題は次のとおりです。JScrollPaneをウィンドウに合わせてサイズ変更し、水平方向に特定のサイズまでサイズ変更しようとしています。ウィンドウで拡大しようとするのをやめるべきです。
GridBagLayout でそれを行うことはできますか? もしそうなら、どのように?
これを行う1つの方法は、スクロールペインを別のスクロールペインにラップJPanel
し、BoxLayout
BoxLayoutが強制するスクロールペインにMaximumSizeを設定することです。
梱包:
ストレッチ (最大幅は 700 ピクセルに設定されています):
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.Vector;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class TestGridBagLayout2 {
protected void initUI() throws MalformedURLException {
final JFrame frame = new JFrame();
frame.setTitle(TestGridBagLayout2.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(new GridBagLayout());
Vector<Vector<String>> data = new Vector<Vector<String>>();
for (int i = 0; i < 20; i++) {
Vector<String> v = new Vector<String>();
for (int j = 0; j < 1; j++) {
v.add("Cell (" + (i + 1) + "," + (j + 1) + ")");
}
data.add(v);
}
DefaultTableModel model = new DefaultTableModel(data, new Vector<String>(
Arrays.asList("Col-1"/*, "Col-2", "Col-3", "Col-4", "Col-5"*/)));
JTable table = new JTable(model);
JScrollPane scroll = new JScrollPane(table);
scroll.setMaximumSize(new Dimension(700, Integer.MAX_VALUE));
JPanel wrappingPanel = new JPanel(null);
wrappingPanel.setLayout(new BoxLayout(wrappingPanel, BoxLayout.LINE_AXIS));
wrappingPanel.add(scroll);
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.BOTH;
panel.add(wrappingPanel, gbc);
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
new TestGridBagLayout2().initUI();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
});
}
}