java

2013-03-01 15 views
6

içinde GridBagLayout kullanırken bir maksimum bileşen boyutu ayarlama Benim sorun şudur: Pencereyle birlikte, bir pencere boyutu, pencere ile büyümeye çalışmayı durduracak şekilde yatay olarak belirli bir boyuta yeniden boyutlandırma için bir JScrollPane sahip olmaya çalışıyorum .java

Bunu bir GridBagLayout ile yapabilir miyim? Öyleyse nasıl ? Paketli

: bunu

+0

JComponents'ın bir metod setMaximumSize() kullandığına inanıyorum, bunu kullanmayı denediniz mi? – souldzin

+0

GridBagLayout'u o kadar kullanmıyorum ki nasıl çalıştığını bilmiyorum. Ancak, BoxLayout'un maksimum boyuta saygı duyduğunu biliyorum. – camickr

+0

GridBagLayout maalesef setMaximumSize() yöntemini dikkate almıyor. İlk denediğim şey. BoxLayout uygulamak istediğim tasarım için gerçekten kesmiyor ... –

cevap

1

bir yolu BoxLayout ile başka JPanel yılında ScrollPane sarın ve BoxLayout zorunlu kılar sizin kaydırma çubukları üzerinde bir MaximumSize ayarlamaktır

packed display

Gerilmiş (maks genişlik 700 px) olarak ayarlanmıştır:

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

Bu iyi bir fikir, ama çok şişirilmiş ... Çözüm olarak işaretlemeden önce daha iyi fikirlerin ortaya çıkıp çıkmadığını görmek için sabırsızlanıyorum. Yine de teşekkürler! –

+0

@ user2015634 Daha iyi bir şey olursa haberim olsun. Bunu daha basit bir şekilde nasıl yapacağımızı öğrenmekten memnun olurum. –