BorderLayout, 2Panels, EAST wird nicht angezeigt ??

Diskutiere BorderLayout, 2Panels, EAST wird nicht angezeigt ?? im Java Basics - Anfänger-Themen Bereich.
M

MasterShredder

Hallo,

ich habe hier einen JFrame dem ich das BorderLayout zugewiesen habe.
Dort will ich nun 2 Panels zuweisen das Erste CENTER und das Zweite EAST.

CENTER wird korrekt angezeigt EAST aber nicht, dort stimmt die Schrift nicht und es hat überhaupt keine Wirkung wenn ich die Positionen der Elemente ändere.

Java:
package Hauptprogramm;
import java.awt.BorderLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

public class Verbrauchsrechner extends JFrame {
    
    //Attribute
    
    private static JTextField eingabeKubik;   
    private static double zustandszahl = 0.94876, brennwert = 11.296, abzuege = 2236;
    private static double doubEingabe, rchztr, kwh, aktKstn;
    private static JTextField tFanzRchztr;
    private static JTextField tFanzKwh;
    
    //Verrechnung
    
        public static void verrechnen() {
            rchztr = doubEingabe - abzuege;
            kwh = Math.round(rchztr * zustandszahl * brennwert);
            //kWh * Preis/kWh auf Euro + Grundgebuer - Vorjahresrechnung
            aktKstn = kwh * 6.39 / 100 + 123.76;
            aktKstn = Math.round(385.83 - aktKstn);
            
        }
    
    //Konstruktor für Fensteraufbau
    public Verbrauchsrechner() {
        setBounds(100, 100, 1000, 300);
        setLayout(new BorderLayout());
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        
        //Fenster erstellen
        Verbrauchsrechner hFenster = new Verbrauchsrechner();
        
        //Erstellung Gasrechner
        
        JPanel gasPanel = new JPanel();
        gasPanel.setLayout(null);
        gasPanel.setBounds(100, 100, 500, 300);
        hFenster.add(gasPanel, BorderLayout.CENTER);
        
        //Label Beschriftungen
        
                JLabel lblBakt = new JLabel("Aktueller Stand:");
                lblBakt.setBounds(70, 200, 115, 20);
                gasPanel.add(lblBakt);
                
                JLabel lblBkubik = new JLabel("m³");
                lblBkubik.setBounds(311, 198, 70, 20);
                gasPanel.add(lblBkubik);
                
                JLabel lblBstndKwh = new JLabel("Stand in kWh:");
                lblBstndKwh.setBounds(86, 140, 99, 20);
                gasPanel.add(lblBstndKwh);
                
                JLabel lblBeinKwh = new JLabel("kWh");
                lblBeinKwh.setBounds(311, 140, 31, 20);
                gasPanel.add(lblBeinKwh);
                
                JLabel lblBrchztr = new JLabel("Rechnungszeitraum:");
                lblBrchztr.setBounds(39, 170, 146, 20);
                gasPanel.add(lblBrchztr);
                
                JLabel lblKubRchztr = new JLabel("m³");
                lblKubRchztr.setBounds(311, 169, 70, 20);
                gasPanel.add(lblKubRchztr);
                
                JLabel lblBdiffVj = new JLabel("Differenz Vj:");
                lblBdiffVj.setBounds(311, 0, 90, 20);
                gasPanel.add(lblBdiffVj);
                
                //Label Ausgaben
                
                JLabel lblDiffVj = new JLabel("");
                lblDiffVj.setBounds(397, 0, 70, 20);
                gasPanel.add(lblDiffVj);
                
                tFanzKwh = new JTextField();
                tFanzKwh.setBackground(UIManager.getColor("Button.background"));
                tFanzKwh.setBounds(190, 140, 120, 20);
                gasPanel.add(tFanzKwh);
                
                tFanzRchztr = new JTextField();
                tFanzRchztr.setBackground(UIManager.getColor("Button.background"));
                tFanzRchztr.setBounds(190, 170, 120, 20);
                gasPanel.add(tFanzRchztr);
                
                //Action Eingabe und Button
                
                eingabeKubik = new JTextField();
                eingabeKubik.setBackground(UIManager.getColor("Button.background"));
                eingabeKubik.setBounds(190, 200, 120, 20);
                gasPanel.add(eingabeKubik);
                
                JButton btnOk = new JButton("OK");
                btnOk.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        doubEingabe = Double.parseDouble(eingabeKubik.getText());
                        verrechnen();
                        tFanzKwh.setText(kwh + "");
                        tFanzRchztr.setText(rchztr + "");
                        lblDiffVj.setText(aktKstn + "");
                    }
                });
                btnOk.setBounds(220, 230, 60, 25);
                gasPanel.add(btnOk);
            
                //Erstellung Stromrechner
                
                JPanel stromPanel = new JPanel();
                gasPanel.setLayout(null);
                gasPanel.setBounds(100, 100, 500, 300);
                hFenster.add(stromPanel, BorderLayout.EAST);
                                
                //Label Beschriftungen
                
                Label lblVersorger = new Label("Versorger: innogy Direkt");
                lblVersorger.setBounds(250, 300, 50, 50);
                stromPanel.add(lblVersorger);
                
                Label lblPreis = new Label("Grundgebühr: 97,35 €  Preis pro kWh: 28,01 ct");
                lblVersorger.setBounds(250, 250, 50, 50);
                stromPanel.add(lblPreis);
                
        //Fenster Optionen Fenster anzeigen
//        hFenster.pack();
        hFenster.setVisible(true);
        
    }


}
 
L

LimDul

Ohne tiefer reinzuschauen.
Wenn du einen LayoutManager verwendest, dann sind sämtliche Aufrufe von setBounds überflüssig. Der ist dazu da das zu berechnen, mittels eines Aufrufs von hFenster.pack() (Der bei dir auskommentiert ist).

Allerdings sollten dann deine SubPanels ebenfalls LayoutManager bekommen, damit das klappt.
Alternativ musst du deinen SubPanels beibringen was ihre preferredSize ist - damit arbeitet nämlich der LayoutManager. Nur ist es nicht sinnvoll, die Panels ohne LayoutManager zu nutzen und nur bei Frame einen zu haben. Denn dann wird das, sobald sich die Größe des Fensters ändert das mit Sicherheit nicht mehr so verhalten, wie du willst.
 
M

MasterShredder

DAnke,
das hat funktioniert.

und sorry habe unten ab stromPanel paar schlampige Fehler gefunden:(:confused:.

Aber ja, habe preferredSize angegeben und jetzt bekomme ich alle zwei Panels angezeigt.
 
Thema: 

BorderLayout, 2Panels, EAST wird nicht angezeigt ??

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben