2013-03-01 13 views
6

Mój problem jest następujący: Próbuję zmienić rozmiar okna JScrollPane za pomocą okna, do pewnego rozmiaru w poziomie, gdzie powinien przestać próbować rosnąć wraz z oknem .Ustawianie maksymalnego rozmiaru komponentu podczas korzystania z GridBagLayout w java

Czy mogę to zrobić za pomocą GridBagLayout? Jeśli tak to jak ?

+0

Wierzę, że JComponents ma metodę setMaximumSize(), czy próbowałeś tego używać? – souldzin

+0

Nie używam GridBagLayout tak bardzo, więc nie wiem jak to działa. Wiem jednak, że BoxLayout respektuje maksymalny rozmiar. – camickr

+0

GridBagLayout nie bierze niestety pod uwagę setMaximumSize(). Pierwsza rzecz, którą próbowałem. BoxLayout tak naprawdę nie obciąża go za projekt, który chcę zaimplementować ... –

Odpowiedz

1

Jednym ze sposobów na to jest zawinąć ty ScrollPane w innym JPanel z BoxLayout i ustawić MaximumSize na swoim ScrollPane który będzie wymuszał BoxLayout:

pakiety:

packed display

Rozciągnięte (max szerokość została ustawiona na 700 pikseli): 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

To dobry pomysł, ale bardzo rozdęty ... Poczekam, czy pojawią się lepsze pomysły, zanim oznaczysz swoje rozwiązanie. Mimo wszystko dziekuję ! –

+0

@ user2015634 Daj mi znać, jeśli coś lepszego wyjdzie. Chętnie nauczę się, jak to zrobić w prostszy sposób. –

Powiązane problemy