2013-03-01 48 views
6

我的问题是:我试图让一个JScrollPane调整窗口大小,水平达到一定的大小,它应该停止尝试与窗口一起增长。在java中使用GridBagLayout时设置最大组件大小

我可以使用GridBagLayout来做到这一点吗?如果是这样,怎么样?要做到这一点

+0

我相信JComponents有一个方法setMaximumSize(),你尝试过使用它吗? – souldzin 2013-03-01 15:44:25

+0

我不使用GridBagLayout,所以我不知道它是如何工作的。但是,我知道BoxLayout尊重最大尺寸。 – camickr 2013-03-01 16:08:21

+0

不幸的是GridBagLayout没有考虑setMaximumSize()。我试过的第一件事。 BoxLayout并没有真正地为我想要实现的设计而削减它... – 2013-03-01 16:22:16

回答

1

一种方法是包你在另一个JPanel滚动窗格与BoxLayout和设置您的滚动窗格一个MAXIMUMSIZE它的BoxLayout将执行:

盒装:

packed display

拉伸(最大宽度已设置为700像素): stretched display

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(); 
       } 
      } 
     }); 
    } 

} 
+0

这是一个好主意,但非常臃肿......我会等到看到更好的想法出现之后,再将其标记为解决方案。不管怎样,谢谢你 ! – 2013-03-01 17:18:04

+0

@ user2015634让我知道是否有更好的东西出现。我会很乐意学习如何以一种更简单的方式来做到这一点。 – 2013-03-01 19:11:28