Swing Swing maximale Fenstergrösse ermitteln

Status
Nicht offen für weitere Antworten.

Sejla

Mitglied
Hallo,

Ich hoffe, dass sich diese Thema nicht wiederholt. Ich habe bisschen gesucht im internet nach einer möglicher Lösung für mein Problem und da habe ich leider nichts gefunden.. :(

Ich habe folgendes Problem:

Ich habe eine swing Applikation die in sich ein JPanel enthält. Dieser Panel enthält ein JMenu in und noch ein JPanel wo die ganze Komponenten platziert sind. Der letzte Panel enthält in sich eine Tabelle in einem ScrollPane und gleich unten (vertikale Anordnung) ein Bild in einem zweitem ScrollPane, alles zusammen in einem vertikalem SplitPane.

Meine Komponenten (ScrollPane mit Tabelle und ScrollPane mit dem Bild) haben keine Grösse fix gesetezt. Die Applikation starte ich normal, indem ich den Kontruktor von der JFrame Klasse aufrufe und dieser wiederum den anderen Panel mit Komponenten erzeugt. Damit ich eine maximale Fenstergrösse erreiche, setze ich noch window.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH); vor dem window.setVisible(true)

Das Fenster wird maximiert, nur die Tabelle ist extrem lang, ich vermute deswegen weil meine Bild in dem anderem Scrollpane auch serh gross ist, eigentlich viel grösser als die eigentliche Fenstergrösse.

Ich weiss, dass ich mit setSize() oder setPreferedSize() die Grösse von Komponenten explizit setzen kann, nur wie kann ich wissen wie gross mein Fenster eigentlich ist wo die Komponenten platziert werden bevor es noch sichtbar wird, befor ich also setVisible(true) setze?? Mein Problem ist also, dass die Grösse von meinen Komponenten von der Grösse des Fensters abhängt und die Grösse muss dann schon gesetzet werden beim Erzeugen von diesem Komponenten befor das alles noch sichtbar wird.

Ich stecke mit dem Problems eit paar Tage, wenn mir jemand damit helfen kann, wäre sehr hilfreich!

Hier ein kurzer ausschnitt aus meinem code:

Java:
/**
Die JFrame Klasse, die den Panel enthält
**/

public class MainView extends JFrame {
    
    Container content = getContentPane(); 
    
    private static MainView mainView = null;
    
    private WorkingView workingView; 
   
    private MainView() {
        content.setLayout(new BorderLayout(0, 0));
    }
    
    public void initWorkingView() {
        workingView = new WorkingView(this);
        content.add(workingView, BorderLayout.CENTER);
    }
    
    public synchronized static MainView getInstance() {
        if (mainView == null) {
            mainView = new MainView();
        }
        
        return mainView;
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SwingUtilities.invokeLater(new Runnable() {           
            @Override
            public void run() {
               MainView view = MainView.getInstance();
               view.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);

               view.initWorkingView();
               
               view.setVisible(true);
              
            }
        });

    }

//==========================

Java:
/**
 1.Panel, der einen anderen Panel enthält 
**/

public class WorkingView extends JPanel {
    
    private MainView parent;
    
    private JMenuBar mainMenu = new JMenuBar();
   

    public WorkingView(MainView parent) {
        this.parent = parent;
        
        setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
        
       // setSize(new Dimension(parent.getContentPane().getSize()));
        
        System.out.println("panel size: " + parent.getContentPane().getSize());
        
        createMenu();
        
        LocalisationWindow localWindow = new LocalisationWindow(this);
        
      //  setPreferredSize(parent.getSize());
      //  setSize(parent.getSize());
        
        add(localWindow);
    }
    

    private void createMenu() {
        parent.setJMenuBar(mainMenu);
    }
}
//========================

Java:
/**
 Panel mit ScrollPanes
**/

public class LocalisationWindow extends JPanel {
    
    private WorkingView parent;

    private JScrollPane scrollPane;
    private JScrollPane tableScrollPane;
    private JTable table;
    
    private JSplitPane vertSplitPane;
    
    private DisplayedImage displayedImage; // ein JLabel mit dem Bild als Hintergrund
  
    private GpsPosition gpsPosition;
 
    
    Object[] headers = {"PTO", "MAC", "Status", "Batterie"};
    Object[][] data = {
            {"PTO 1", "A1256D16", "ONLINE", "Low"},
            {"PTO 2", "6725E875", "OFFLINE", "Ok"},
            {"PTO 3", "A1256D16", "ONLINE", "Ok"}
    };
   
    public LocalisationWindow(WorkingView parent) {
        
        this.parent = parent;
        
        /*
        // set window size to the size of screen
        setSize(getMaximumScreenSize());
        */
    
        // creates components and put them to the window
        initLocalisationWindow();
     
    }
    
    public Dimension getMaximumScreenSize() {
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension dimension = toolkit.getScreenSize();
        
        return dimension;
    }
   
    public void initLocalisationWindow() {
        createContent();
     } 
    
      private void createContent() {   
        // create table
        createTable();
        
        // create tableScrollPane
        tableScrollPane = new JScrollPane(table);
       // tableScrollPane.setSize(new Dimension(parent.getParent().getContentPane().getSize().width, 150) );
       // tableScrollPane.setPreferredSize(new Dimension(parent.getParent().getContentPane().getSize().width, 150) );
        tableScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        tableScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
         
        displayedImage = imageLoaderThread.getMapGenerator().getOutdoorImage();
        displayedImage.setOpaque(true);
        
        scrollPane = new JScrollPane(displayedImage);
        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
      //  scrollPane.setSize(new Dimension(parent.getParent().getContentPane().getSize().width, 
//parent.getParent().getContentPane().getSize().height - 150) );
       //   scrollPane.setPreferredSize(new Dimension(parent.getParent().getContentPane().getSize().width, 
//parent.getParent().getContentPane().getSize().height - 150) );
        
        // create vertical split pane
        vertSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, tableScrollPane, scrollPane);
        vertSplitPane.setOneTouchExpandable(true);
        vertSplitPane.setDividerLocation(150);
        vertSplitPane.setDividerSize(20);
        
        add(vertSplitPane, BorderLayout.CENTER);
    }
}
lg
Sejla
 
Zuletzt bearbeitet von einem Moderator:

Michael...

Top Contributor
Das festlegen von Größe und Postion einer Komponente ist eigentlich Aufgabe eines LayoutManagers.

Dein Aufbau ist ein bisschen merkwürdig. Die Klasse WorkingView ist nichts anderes als ein Panel, welches wiederum ein Panel enthält--> könnte man sich eigentlich schenken.
In der Klasse LocalisationWindow fügst Du eine Komponente wie folgt ein:
Code:
add(vertSplitPane, BorderLayout.CENTER);
Ich konnte aber nirgends entdecken, dass das Layout auf BorderLayout gesetzt wurde. Ein JPanel verwendet standardmäßig ein FlowLayout --> daher vermutlich auch die Darstellungsprobleme.
 

Sejla

Mitglied
Hi,

der eigentlicher Grund wieso ich ein Panel in die MainView Klasse habe, der wiederum ein Panel enthält ist, weil ich mehrere solche LocalisationWindows Panel nebeneinander haben kann. Das wird im laufzeit noch über Menü möglich sein einzustellen. Deswegen ist WorkingView ein Panel der mehrere andere Panels haben kann. Am Anfang habe ich nur 1 genommen.

Ich habe probiert zuerst ohne setSize() und setPreferedSize() auf die einleznen Komponenten, und dann waren die Scrollbars von den beiden ScrollPanes nicht sichtbar, weil sie ScrollPanes waren riesengross (vermute wegen meinen JLabel als View Component im scrollPane).

Andere Variante habe ich auch probiert - die Grösse von dem WorkingView Panel auf die Bilschirmauflösung zu setzen und die restliche Komponenten (die zwei ScrollPanes in anderem Panel auch danach setzen). Nur da habe ich gesehen, dass ich die Höhe von derTaskleiste und die Höhe von meinem JMenuBar berücksichtigen muss. Dann hat es gepasst, dann sieht man endlich alle Komponenten. Ich weiss nur nicht wie optimal das eigentlich ist, gibts da eine andere Methode die Grösse so zu setzen, dass es für jede Bildshirmgrösse passt? Kann ich da wirklich nur von der Bilshirmauflösung ausgehen und anhand davon die Grösse von dem Fenster berechnen?

Die genaue Grössenfestlegung ist mir wichtig, da wie erwähnt, während der Laufzeit man über Menü mehrere Fenster auswählen kann, die dann nebeneinader angeordent sein sollen und die einzelnen Grössen müssen dann auch entsprechend angepasst.

lg
Sejla
 

KrokoDiehl

Top Contributor
Wenn du SplitPanes benutzt, kannst du mal mit
Code:
setDividerLocation(double)
probieren einen prozentualen Wert zu setzen, vielleicht erreichst du damit schon relativ schnell sehr viel.
Ansonsten bleibt die Anordnung nunmal Sache des LayoutManagers und die "saubererste" Lösung wäre es daher wohl, einen entsprechenden zu wählen, der auch den verfügbaren Platz deinen Wünschen nach entsprechend aufteilt.
Das BorderLayout z.B. gibt allen verfügbaren Raum in den Center-Bereich.
 

Sejla

Mitglied
Ja, beim WorkingView habe ich FlowLayout als Layout genommen und beim LocalisationWindow habe ich jetzt fix den BorderLayout gesetzt. Nur das mit der Fenstergrösse ändert sich nciht viel,w enn ich es weglasse.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
N JavaFX Umstieg von Swing auf Java FX AWT, Swing, JavaFX & SWT 6
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Plugin oder eigenes Tool mit zB SWING AWT, Swing, JavaFX & SWT 2
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
S (Swing)Vollbild anzeigen unter Linux/Mac AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben