Wie man Richtig Setzen Sie die Minimale Größe in Java?

Für eine GUI-Anwendung erstelle ich in Java ich habe folgende:

  • Ein JFrame, auf eine minimale Größe (300,200)
  • Eine JSplitPane, in dem liegt:
    • Auf der linken Seite, eine JScrollPane (die ein JTree) mit einer Mindestgröße von (100,0) (ich will nur beschränken Sie die Breite auf 200)
    • Auf der rechten Seite ein JPanel mit einer Mindestgröße von (200,0)

Die Dimensionierung braucht mir keine Frage, unter den folgenden Bedingungen:

  • Die Größe des JSplitPane den ganzen Weg nach Links (die JScrollPane die minimale Größe), und anschließend die Größe des Fensters danach
  • Nur die Größe des Fensters, bis zu einem gewissen Grad

Tritt das problem auf wenn ich mich bewege, die JSplitPane zu nah an der rechten, worauf die Größe des Fensters das JPanel in der rechten Seite der JSplitPane einhält, um die minimale Breite ich.

Habe ich versucht die Einstellung einer maximalen Breite auf die JScrollPane, die nicht scheinen, um zu helfen.

Gibt es etwas, das mit maximalen Größen muss ich tun? Oder gibt es vielleicht eine Möglichkeit zur Befestigung einer Listener, um eine der Platten zu zwingen, meine gewünschte Verhalten? Letztlich will ich nur den rechten Bereich in der JSplitPane nie weniger als 200px Breite.

Hier ist ein Beispiel mit Verhalten, das ich erlebe:

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;

public class ResizeTest
{
    private JFrame frame;
    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                try
                {
                    ResizeTest window = new ResizeTest();
                    window.frame.setVisible(true);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
    }
    public ResizeTest()
    {
        initialize();
    }
    private void initialize()
    {
        frame = new JFrame();
        frame.setMinimumSize(new Dimension(300, 200));
        frame.setBounds(100,100,450,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new GridLayout(0, 1, 0, 0));

        JSplitPane splitPane = new JSplitPane();
        frame.getContentPane().add(splitPane);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setMinimumSize(new Dimension(100, 0));
        splitPane.setLeftComponent(scrollPane);

        JTree tree = new JTree();
        tree.setMinimumSize(new Dimension(100, 0));
        scrollPane.setViewportView(tree);

        JPanel panel = new JPanel();
        panel.setMinimumSize(new Dimension(200, 0));
        splitPane.setRightComponent(panel);
    }
}

Update:

Ich fürchte, dass ich nicht vollständig verstehen, die Punkt-Versuch gemacht werden, die in den vorgeschlagenen Lösungen, mit Ausnahme, dass setPreferred() und setMinimum/Maximum() sind besser zu vermeiden.

Meine Frage in Antwort, zu lernen das ist, was sind meine Optionen für die Einschränkung der JSplitPane Teiler außerhalb der Verwendung dieser Methoden? MadProgrammer genannten Zuhören für die componentResized Ereignis, aber ich brauche nur ein wenig mehr Klärung, warum. Bezeichne ich setDividerLocation() in Reaktion auf dieses Ereignis?

Ich entschuldige mich im vorraus wenn die Frage angehängt ist gedacht als eine separate StackOverflow-Frage gänzlich, kann ich ein anderes posten und link hier, wenn nötig.

Update 2:

Ist einfach nicht der Regulierung, wie der Anwender wählt die Größe der Fenster und mit der rechten panel in eine JScrollPane ein gangbarer Weg? Sieht für mich so etwas wie der standard der Praxis.

InformationsquelleAutor mellowmaroon | 2012-09-18
Schreibe einen Kommentar