Auf MainJFrame Panels anzeigen lassen

MasterShredder

Aktives Mitglied
Hallo,

habe in meiner main Klasse ein JFrame. Von dort will ich jetzt meine Panel aufrufen(anzeigen) lassen.
Die den eigentlichen Inhalt meines Programmes beinhalten sollen.

Java:
package Hauptprogramm;

import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Verbrauchsrechner extends JFrame {
    
    //Konstruktor für Fensteraufbau
        public Verbrauchsrechner() {
            setBounds(100, 100, 1000, 300);
            setLayout(new GridLayout());
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }

    public static void main(String[] args) {
        
        //Fenster erstellen
                Verbrauchsrechner hFenster = new Verbrauchsrechner();
                
                                
        //Panels einfügen
                GasPanel gp = new GasPanel();
                hFenster.add(gp);
                
                
                
                
                //Fenster Optionen: Fenster anzeigen
                hFenster.pack();
                hFenster.setVisible(true);

    }

}
Java:
package Hauptprogramm;

import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;




public class GasPanel extends JPanel{
    
        public GasPanel() {           
        setLayout(new GridLayout());               
        setPreferredSize(new Dimension(500, 300));
        }
    
JLabel lbl = new JLabel("Label soll angezeigt werden.");

JLabel lbl2 = new JLabel("Hier soll Label 2 angezeigt werden.");
}

Im eigentlichen will ich diese 2 Verbrauchsrechner in 2 Panels aufteilen.

Code:
package Hauptprogramm;
import java.awt.BorderLayout;
import java.awt.Dimension;
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
    //Gasrechner
    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, tFanzKwh;
    
    //Stromrechner
    private static JTextField tFAktStndAus, tFdiffAus, tFaktRchBtrgAus, tFaktKwhEin;
    private static double aktStnd, stromDoubEingabe, aktBtrg, diffVrJhr;
    private static double prsKwh = 28.01, kZaehrWrtAbzuege = 113961.000;
        
//Verrechnung Aktionen der Panels
        
        //Verrechnung GasPanel
    
        public static void verrechnen() {
            rchztr = doubEingabe - abzuege;
            kwh = Math.round(rchztr * zustandszahl * brennwert);
            //kWh * Preis/kWh auf Euro + Grundgebuehr - Vorjahresrechnung
            aktKstn = kwh * 6.39 / 100 + 123.76;
            aktKstn = Math.round(385.83 - aktKstn);           
        }
        
        //Verrechnung StromPanel
        
        public static void stromVerrechnen() {
            //Aktueller Stand ermitteln
            aktStnd = Math.round(stromDoubEingabe - kZaehrWrtAbzuege);
            
            //kWh * Preis/kWh auf Euro + Grundgebuehr
            aktBtrg = Math.round(aktStnd * prsKwh / 100 + 97.35);
            diffVrJhr = 470.50 - aktBtrg;           
        }
    
    //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.setPreferredSize(new Dimension(500, 300));
//        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 GasPanel
                
                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();
                stromPanel.setLayout(null);
                stromPanel.setPreferredSize(new Dimension(500, 300));
//                stromPanel.setBounds(100, 100, 500, 300);
                hFenster.add(stromPanel, BorderLayout.EAST);
                                
                //Label Beschriftungen
                
                JLabel lblVersorger = new JLabel("Versorger: innogy Direkt");               
                lblVersorger.setBounds(160, 0, 180, 20);
                stromPanel.add(lblVersorger);
                
                JLabel lblPreis = new JLabel("Grundgebühr: 97,35 €  Preis pro kWh: 28,01 ct");
                lblPreis.setBounds(85, 20, 330, 20);
                stromPanel.add(lblPreis);
                
                JLabel lblVorJsnt = new JLabel("Vorjahresstand 1.148,80 kWh");
                lblVorJsnt.setBounds(155, 80, 210, 20);
                stromPanel.add(lblVorJsnt);
                
                JLabel lblVorJbtrg = new JLabel("Vorjahresschlußbetrag 416,89 €");
                lblVorJbtrg.setBounds(145, 100, 230, 20);
                stromPanel.add(lblVorJbtrg);
                
                JLabel lblAktStnd = new JLabel("Aktueller Stand:");
                lblAktStnd.setBounds(70, 120, 120, 20);
                stromPanel.add(lblAktStnd);
                
                JLabel lblKwh = new JLabel("kWh");
                lblKwh.setBounds(310, 120, 40, 20);
                stromPanel.add(lblKwh);
                
                JLabel lblAktRchnBtrg = new JLabel("Akt. Rechnungsbetrag:");
                lblAktRchnBtrg.setBounds(22, 140, 170, 20);
                stromPanel.add(lblAktRchnBtrg);
                
                JLabel lblRchBtrgEuo = new JLabel("€");
                lblRchBtrgEuo.setBounds(310, 140, 8, 20);
                stromPanel.add(lblRchBtrgEuo);
                
                JLabel lblDiffVjS = new JLabel("Differenz Vorjahr:");
                lblDiffVjS.setBounds(59, 160, 130, 20);
                stromPanel.add(lblDiffVjS);
                
                JLabel lblDiffEuo = new JLabel("€");
                lblDiffEuo.setBounds(310, 160, 8, 20);
                stromPanel.add(lblDiffEuo);
                
                JLabel lblAktKwhEin = new JLabel("Aktueller Stand Eingabe:");
                lblAktKwhEin.setBounds(10, 200, 180, 20);
                stromPanel.add(lblAktKwhEin);
                
                JLabel lblAktKwh = new JLabel("kWh");
                lblAktKwh.setBounds(310, 200, 40, 20);
                stromPanel.add(lblAktKwh);
                                
                //Label Ausgaben
                
                tFAktStndAus = new JTextField();
                tFAktStndAus.setBackground(UIManager.getColor("Button.background"));
                tFAktStndAus.setBounds(190, 120, 120, 20);
                stromPanel.add(tFAktStndAus);
                
                tFdiffAus = new JTextField();
                tFdiffAus.setBackground(UIManager.getColor("Button.background"));
                tFdiffAus.setBounds(190, 160, 120, 20);
                stromPanel.add(tFdiffAus);
                
                tFaktRchBtrgAus = new JTextField();
                tFaktRchBtrgAus.setBackground(UIManager.getColor("Button.background"));
                tFaktRchBtrgAus.setBounds(190, 140, 120, 20);
                stromPanel.add(tFaktRchBtrgAus);
                
                //Action Eingabe und Button StromPanel
                
                tFaktKwhEin = new JTextField();
                tFaktKwhEin.setBackground(UIManager.getColor("Button.background"));
                tFaktKwhEin.setBounds(190, 200, 120, 20);
                stromPanel.add(tFaktKwhEin);
                
                JButton btnOkStr = new JButton("OK");
                btnOkStr.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        stromDoubEingabe = Double.parseDouble(tFaktKwhEin.getText());
                        stromVerrechnen();
                        tFaktRchBtrgAus.setText(aktBtrg + "");
                        tFdiffAus.setText(diffVrJhr + "");
                        tFAktStndAus.setText(aktStnd + "");
                    }
                });
                btnOkStr.setBounds(220, 230, 60, 25);
                stromPanel.add(btnOkStr);
                
        //Fenster Optionen: Fenster anzeigen
        hFenster.pack();
        hFenster.setVisible(true);
        
    }

    
}
 

MasterShredder

Aktives Mitglied
Ja, wie füge ich sie den hinzu?
Hab mir auch schon so was gedacht wie eine Methode aufzurufen.
Halt in der Main PANELOBJEKT.METHODE

Java:
public class GasPanel extends JPanel{
    
        public GasPanel() {           
        setLayout(new GridLayout());               
        setPreferredSize(new Dimension(500, 300));
        }
    public void fenster() {
JLabel lbl = new JLabel("Label soll angezeigt werden.");

JLabel lbl2 = new JLabel("Hier soll Label 2 angezeigt werden.");
}
}
 

MoxxiManagarm

Top Contributor
//Attribute
//Gasrechner 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, tFanzKwh;
//Stromrechner
private static JTextField tFAktStndAus, tFdiffAus, tFaktRchBtrgAus, tFaktKwhEin;
private static double aktStnd, stromDoubEingabe, aktBtrg, diffVrJhr;
private static double prsKwh = 28.01, kZaehrWrtAbzuege = 113961.000;

Warum sind die alle static? :eek:
 

MasterShredder

Aktives Mitglied
So jetzt zum eigentlichen 🤪,
ich hab einfach mal wieder probiert wie ich es gestern versucht habe und es ging aufeinmal😄.
War wohl nur ein Neustart fällig.

Nur jetzt gefallen mir die Komponenten nicht ich hätte sie gern so angeordnet das die Textfelder alle untereinander stehen.

Hier mein code:
Java:
package Hauptprogramm;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class Verbrauchsrechner extends JFrame {
    
    //Konstruktor für Fensteraufbau
        public Verbrauchsrechner() {
            setLayout(new FlowLayout());
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }

    public static void main(String[] args) {
        
        //Fenster erstellen
                Verbrauchsrechner hFenster = new Verbrauchsrechner();
                                
        //Panels einfügen
                GasPanel gp = new GasPanel();
                gp.fenster();
                hFenster.add(gp);
                
                StromPanel sp = new StromPanel();
                hFenster.add(sp);
                
                
                //Fenster Optionen: Fenster anzeigen
                hFenster.pack();
                hFenster.setVisible(true);

    }

}

Java:
package Hauptprogramm;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;




public class GasPanel extends JPanel{
    
//Attribute
    //Gasrechner
    private JTextField eingabeKubik;   
    private double zustandszahl = 0.94876, brennwert = 11.296, abzuege = 2236;
    private double doubEingabe, rchztr, kwh, aktKstn;
    private JTextField tFanzRchztr, tFanzKwh;

//Konstruktor
        public GasPanel() {           
        setLayout(new FlowLayout(FlowLayout.CENTER, 10, 5));               
        setPreferredSize(new Dimension(300, 300));       
        }
    
//Verrechnung GasPanel
        
    public void verrechnen() {
        rchztr = doubEingabe - abzuege;
        kwh = Math.round(rchztr * zustandszahl * brennwert);
        //kWh * Preis/kWh auf Euro + Grundgebuehr - Vorjahresrechnung
        aktKstn = kwh * 6.39 / 100 + 123.76;
        aktKstn = Math.round(385.83 - aktKstn);           
        }
        
//Fensteraufbau
    
    public void    fenster() {

        //Stand in kWh
        JLabel lblBstndKwh = new JLabel("Stand in kWh:");
        add(lblBstndKwh);
        
        tFanzKwh = new JTextField();
        tFanzKwh.setPreferredSize(new Dimension(100, 20));
        tFanzKwh.setBackground(UIManager.getColor("Button.background"));
        add(tFanzKwh);
        
        JLabel lblBeinKwh = new JLabel("kWh");
        add(lblBeinKwh);
        
        //Rechnungszeitraum
        JLabel lblBrchztr = new JLabel("Rechnungszeitraum:");
        add(lblBrchztr);
        
        tFanzRchztr = new JTextField();
        tFanzRchztr.setPreferredSize(new Dimension(100, 20));
        tFanzRchztr.setBackground(UIManager.getColor("Button.background"));
        add(tFanzRchztr);
        
        JLabel lblKubRchztr = new JLabel("m³");
        add(lblKubRchztr);
        
        //Aktueller stand und Eingabe       
        JLabel lblBakt = new JLabel("Aktueller Stand:");
        add(lblBakt);
        
        eingabeKubik = new JTextField();
        eingabeKubik.setPreferredSize(new Dimension(100, 20));
        eingabeKubik.setBackground(UIManager.getColor("Button.background"));
        add(eingabeKubik);
        
        JLabel lblBkubik = new JLabel("m³");
        add(lblBkubik);
                        
        
//        JLabel lblBdiffVj = new JLabel("Differenz Vj:");
//        add(lblBdiffVj);
//                       
//        //Label Ausgaben
//                       
//        JLabel lblDiffVj = new JLabel("");
//        add(lblDiffVj);
                        
        
                                
        //Action Button GasPanel
                        
        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 + "");
            }
        });
                add(btnOk);
    }
}
 

mihe7

Top Contributor
ich hab einfach mal wieder probiert wie ich es gestern versucht habe und es ging aufeinmal😄.
War wohl nur ein Neustart fällig.
Das scheint unter Eclipse der gängige Lösungsweg zu sein :p

Nur jetzt gefallen mir die Komponenten nicht ich hätte sie gern so angeordnet das die Textfelder alle untereinander stehen.
Dann musst Du einen anderen LayoutManager verwenden, z. B. BoxLayout (s. https://docs.oracle.com/javase/tutorial/uiswing/layout/box.html)
 

MasterShredder

Aktives Mitglied
So,
ich habe nun das GridBagLayout genommen. Gibt es eine Möglichkeit die einzelnen Elemente z.B. rechtsbündig, linksbündig oder anders auszurichten. Oder kennt jemand eine gute Erklärung dazu.
Habe Java docs gelesen nur das bringt mich nicht wirklich weiter.

Java:
package Hauptprogramm;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;




public class GasPanel extends JPanel{
    
//Attribute
    //Gasrechner
    private JTextField eingabeKubik;   
    private double zustandszahl = 0.94876, brennwert = 11.296, abzuege = 2236;
    private double doubEingabe, rchztr, kwh, aktKstn;
    private JTextField tFanzRchztr, tFanzKwh, tFdiffVj;
    GridBagConstraints gbc = new GridBagConstraints();
//Konstruktor
        public GasPanel() {           
        setLayout(new GridBagLayout());               
        setPreferredSize(new Dimension(500, 300));       
        }
    
//Verrechnung GasPanel
        
    private void verrechnen() {
        rchztr = doubEingabe - abzuege;
        kwh = Math.round(rchztr * zustandszahl * brennwert);
        //kWh * Preis/kWh auf Euro + Grundgebuehr - Vorjahresrechnung
        aktKstn = kwh * 6.39 / 100 + 123.76;
        aktKstn = Math.round(385.83 - aktKstn);           
        }
        
//Fensteraufbau
    
    public void    fenster() {
        
        JLabel lblBdiffVj = new JLabel("Differenz Vj:");
        gbc.gridx = 0;
        gbc.gridy = 0;
        add(lblBdiffVj, gbc);
        
        tFdiffVj = new JTextField();
        tFdiffVj.setPreferredSize(new Dimension(100, 20));
        gbc.gridx = 1;
        gbc.gridy = 0;
        tFdiffVj.setBackground(UIManager.getColor("Button.background"));
        add(tFdiffVj, gbc);
        
        JLabel lblBeur = new JLabel("€");
        gbc.gridx = 2;
        gbc.gridy = 0;
        add(lblBeur, gbc);
                        
        //Stand in kWh
        JLabel lblBstndKwh = new JLabel("Stand in kWh:");
        gbc.gridx = 0;
        gbc.gridy = 1;
        add(lblBstndKwh, gbc);
        
        tFanzKwh = new JTextField();
        tFanzKwh.setPreferredSize(new Dimension(100, 20));
        gbc.gridx = 1;
        gbc.gridy = 1;
        tFanzKwh.setBackground(UIManager.getColor("Button.background"));
        add(tFanzKwh, gbc);
        
        JLabel lblBeinKwh = new JLabel("kWh");
        gbc.gridx = 2;
        gbc.gridy = 1;
        add(lblBeinKwh, gbc);
        
        //Rechnungszeitraum
        JLabel lblBrchztr = new JLabel("Rechnungszeitraum:");
        gbc.gridx = 0;
        gbc.gridy = 2;
        add(lblBrchztr, gbc);
        
        tFanzRchztr = new JTextField();
        tFanzRchztr.setPreferredSize(new Dimension(100, 20));
        gbc.gridx = 1;
        gbc.gridy = 2;
        tFanzRchztr.setBackground(UIManager.getColor("Button.background"));
        add(tFanzRchztr, gbc);
        
        JLabel lblKubRchztr = new JLabel("m³");
        gbc.gridx = 2;
        gbc.gridy = 2;
        add(lblKubRchztr, gbc);
        
        //Aktueller stand und Eingabe       
        JLabel lblBakt = new JLabel("Aktueller Stand:");
        gbc.gridx = 0;
        gbc.gridy = 3;
        add(lblBakt, gbc);
        
        eingabeKubik = new JTextField();
        eingabeKubik.setPreferredSize(new Dimension(100, 20));
        gbc.gridx = 1;
        gbc.gridy = 3;
        eingabeKubik.setBackground(UIManager.getColor("Button.background"));
        add(eingabeKubik, gbc);
        
        JLabel lblBkubik = new JLabel("m³");
        gbc.gridx = 2;
        gbc.gridy = 3;
        add(lblBkubik, gbc);
        
        
        //Action Button GasPanel
                        
        JButton btnOk = new JButton("OK");
        gbc.gridx = 1;
        gbc.gridy = 4;
        btnOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                doubEingabe = Double.parseDouble(eingabeKubik.getText());
                verrechnen();
                tFanzKwh.setText(kwh + "");
                tFanzRchztr.setText(rchztr + "");
                tFdiffVj.setText(aktKstn + "");
            }
        });
                add(btnOk, gbc);
    }
}

MFG
MasterShredder
 

LimDul

Top Contributor
So,
ich habe nun das GridBagLayout genommen. Gibt es eine Möglichkeit die einzelnen Elemente z.B. rechtsbündig, linksbündig oder anders auszurichten. Oder kennt jemand eine gute Erklärung dazu.
Habe Java docs gelesen nur das bringt mich nicht wirklich weiter.
Schau dir in dem Link mal den Abschnitt Specifiying Constraints an:

nchorUsed when the component is smaller than its display area to determine where (within the area) to place the component. Valid values (defined as GridBagConstraints constants) are CENTER (the default), PAGE_START, PAGE_END, LINE_START, LINE_END, FIRST_LINE_START, FIRST_LINE_END, LAST_LINE_END, and LAST_LINE_START.
Here is a picture of how these values are interpreted in a container that has the default, left-to-right component orientation.

FIRST_LINE_STARTPAGE_START
FIRST_LINE_END​
LINE_START
CENTER​
LINE_END​
LAST_LINE_STARTPAGE_END
LAST_LINE_END​

Um eine Komponente z.B. Rechtsbündig zu haaben, muss man einfach gbc,anchor = GridBagConstraints.LINE_END; machen.

PS: Allgemeine Anmerkung, die nix mit dem Problem zu tun hat.
Deine Variablennamen sind fuirchtbar :)
tFanzKwh was ist das? Das sieht beim lesen aus wie auf die Tastatur gerotzt. Lieber Namen sprechend ausschreiben und nur abkürzen, wo es noch lesbar bleibt.
 

MasterShredder

Aktives Mitglied
Ok😆,
ich hatte irgend wo gelesen das man das so macht. Ich persönlich komme damit auch gut klar.
Das heißt textFieldAnzeigeKwh. Ah ja das war so bei einer Beschreibung fürn builder da ging es auch darum das man immer bei GUI Elementen den Elementen Typ dazuschreibt wie hier jetzt tF. für TextField. Aber ich halte mich gerne an die allgemeinen Konventionen. Wenn das dann auch anderen weiter hilft. Also würde jetzt AnzeigeKwh reichen??
 

MasterShredder

Aktives Mitglied
Ich habe das ganze jetzt nur auf ein Element angewendet, aber es sind schon gleich alle betroffen.
Java:
//Fensteraufbau   
    public void    fenster() {
        
        JLabel lblBdiffVj = new JLabel("Differenz Vj:");
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.FIRST_LINE_START;
        add(lblBdiffVj, gbc);
        
        tFdiffVj = new JTextField();
        tFdiffVj.setPreferredSize(new Dimension(100, 20));
        gbc.gridx = 1;
        gbc.gridy = 0;
        tFdiffVj.setBackground(UIManager.getColor("Button.background"));
        add(tFdiffVj, gbc);
 

MasterShredder

Aktives Mitglied
Na, wenn ich es jetzt bei einem Element linksbündig gestellt habe. Dann kommen noch 3 Elemente doch danach kommen welche die ich rechtsbündig haben will. Muss ich dann er wieder beim ersten rechtsbündigen einen Eintrag machen.
Oder muss ich jedem Element seine Ausrichtung "manuell" zuweisen. Frage auch wegen der besseren Programmierung, was wäre besser?
 

mihe7

Top Contributor
Muss ich dann er wieder beim ersten rechtsbündigen einen Eintrag machen.
Ja, das reicht.

Frage auch wegen der besseren Programmierung, was wäre besser?
Das kann man pauschal nicht sagen. Das eine führt zu übersichtlicherem Code, das andere eliminiert die Auswirkung vorangegangener Änderungen. Ich bevorzuge die erste Variante, wobei ich in Methoden auslagere, wenn es mir sinnvoll erscheint (das ist abhängig vom Layout). Mit GridBagLayout ist es einfach nicht schön, zu arbeiten.

Tatsächlich habe ich seinerzeit, als ich noch Swing-Anwendungen geschrieben habe, stark auf JGoodies FormLayout (http://www.jgoodies.com/freeware/libraries/forms/) gesetzt. Da gibt es aber wohl keine neuen Open-Source Versionen, bis (wenigstens) Java 8 sollten aber auch die alten funktionieren. Eine Alternative dazu wäre MiGLayout (http://www.miglayout.com/).
 

LimDul

Top Contributor
ich bin teilweise bei Anwendungen hingegangen und hab die Konfiguration in .properites Dateien ausgelagert und die geparsed und die Constraints daraus erzeugt um mir die Massen an Code für das erzeugen der Constraints zu sparen.

Ich persönlich mag das GridBagLayout, weil es sehr flexibel ist - aber die Konfiguration der einzelnen Elemente ist extrem geschwätzig.
 

MasterShredder

Aktives Mitglied
Hallo,
ja der ist wirklich sehr geschwätzig😁.
Ich habe eine Methode geschrieben so das ich nur noch die Parameter übergeben muss, hoffe das ist richtig so. Ist das vielleicht so was was Ihr meint(Auslagerung)??

Jetzt habe ich nur ein Problem, wollte jetzt noch "insets" reinpacken bzw. in eine extra Methode das ich etwas Übersicht habe. Nur das will mal wieder nicht wirklich funktionieren.

Hab mal wieder den ganzen Quellcode eingefügt:
Java:
package Hauptprogramm;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;

import jdk.jfr.Name;




public class GasPanel extends JPanel{
        
//Attribute
    private double zustandszahl = 0.94876, brennwert = 11.296, abzuege = 2236;
    private double doubEingabe, rchztr, kwh, aktKstn;
    private JTextField tFanzRchztr, tFanzKwh, tFdiffVj, eingabeKubik;
    //Einheiten
    private String kwhEin = "kWh";
    private char kubik = '\u00B3', euro = '\u20AC';
    
    //GridBagContrains Objekt
    GridBagConstraints gbc = new GridBagConstraints();
    
//Konstruktor
    public GasPanel() {           
    setLayout(new GridBagLayout());               
    setPreferredSize(new Dimension(500, 300));       
    }
        
//Zuweisung GridBagLayout
    private void gbl(int gx, int gy, int gw, int gh) {
        gbc.gridx = gx;
        gbc.gridy = gy;
        gbc.gridwidth = gw;
        gbc.gridheight = gh;
        }
    
    //02
    private void gbl2(int r1, int r2, int r3, int r4) {
        gbc.insets(r1, r2, r3, r4);
    }
        
//Verrechnung GasPanel       
    private void verrechnen() {
        rchztr = doubEingabe - abzuege;
        kwh = Math.round(rchztr * zustandszahl * brennwert);
        //kWh * Preis/kWh auf Euro + Grundgebuehr - Vorjahresrechnung
        aktKstn = kwh * 6.39 / 100 + 123.76;
        aktKstn = Math.round(385.83 - aktKstn);           
        }
        
//Fensteraufbau   
    public void    fenster() {
        
        JLabel lblBdiffVj = new JLabel("Differenz Vj:");
        gbl(0, 0, 1, 1);
        gbc.anchor = GridBagConstraints.LINE_START;
        add(lblBdiffVj, gbc);
        
        tFdiffVj = new JTextField();
        tFdiffVj.setPreferredSize(new Dimension(100, 20));
        gbl(1, 0, 1, 1);
        tFdiffVj.setBackground(UIManager.getColor("Button.background"));
        add(tFdiffVj, gbc);
        
        JLabel differenzVJein = new JLabel(euro + "");
        gbl(2, 0, 1, 1);
        add(differenzVJein, gbc);
                        
        //Stand in kWh
        JLabel lblBstndKwh = new JLabel("Stand in kWh:");
        gbl(0, 1, 1, 1);
        add(lblBstndKwh, gbc);
        
        tFanzKwh = new JTextField();
        tFanzKwh.setPreferredSize(new Dimension(100, 20));
        gbl(1, 1, 1, 1);
        tFanzKwh.setBackground(UIManager.getColor("Button.background"));
        add(tFanzKwh, gbc);
        
        JLabel lblBeinKwh = new JLabel(kwhEin);
        gbl(2, 1, 1, 1);
        add(lblBeinKwh, gbc);
        
        //Rechnungszeitraum
        JLabel lblBrchztr = new JLabel("Rechnungszeitraum:");
        gbl(0, 2, 1, 1);
        add(lblBrchztr, gbc);
        
        tFanzRchztr = new JTextField();
        tFanzRchztr.setPreferredSize(new Dimension(100, 20));
        gbl(1, 2, 1, 1);
        tFanzRchztr.setBackground(UIManager.getColor("Button.background"));
        add(tFanzRchztr, gbc);
        
        JLabel lblKubRchztr = new JLabel("m" + kubik);
        gbl(2, 2, 1, 1);
        add(lblKubRchztr, gbc);       
        
        //Aktueller Stand und Eingabe       
        JLabel lblBakt = new JLabel("Aktueller Stand:");
        gbl(0, 3, 1, 1);
        add(lblBakt, gbc);
        
        eingabeKubik = new JTextField();
        eingabeKubik.setPreferredSize(new Dimension(100, 20));
        gbl(1, 3, 1, 1);
        eingabeKubik.setBackground(UIManager.getColor("Button.background"));
        add(eingabeKubik, gbc);
        
        JLabel lblBkubik = new JLabel("m" + kubik);
        gbl(2, 3, 1, 1);
        add(lblBkubik, gbc);
        
        
        //Action Button GasPanel                       
        JButton btnOk = new JButton("OK");
        gbl(1, 4, 1, 1);
        gbc.ipadx = 3;
        gbc.ipady = 3;
        gbc.anchor = GridBagConstraints.CENTER;
        btnOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                doubEingabe = Double.parseDouble(eingabeKubik.getText());
                verrechnen();
                tFanzKwh.setText(kwh + "");
                tFanzRchztr.setText(rchztr + "");
                tFdiffVj.setText(aktKstn + "");
            }
        });
                add(btnOk, gbc);
    }
}
Java:
package Hauptprogramm;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;

public class StromPanel extends JPanel {
    
//Attribute
    private JTextField tFAktStndAus, tFdiffAus, tFaktRchBtrgAus, tFaktKwhEin;
    private double aktStnd, stromDoubEingabe, aktBtrg, diffVrJhr;
    private double prsKwh = 28.01, kZaehrWrtAbzuege = 113961.000;
    //Einheiten
    private String kwh = "kWh";
    private char euro = '\u20AC';
    GridBagConstraints gbc = new GridBagConstraints();

//Konstruktor   
    public StromPanel() {           
        setLayout(new GridBagLayout());               
        setPreferredSize(new Dimension(500, 300));       
        }   
    
//Verrechnung       
    private void stromVerrechnen() {
        //Aktueller Stand ermitteln
        aktStnd = Math.round(stromDoubEingabe - kZaehrWrtAbzuege);
        //kWh * Preis/kWh auf Euro + Grundgebuehr
        aktBtrg = Math.round(aktStnd * prsKwh / 100 + 97.35);
        diffVrJhr = 470.50 - aktBtrg;           
        }

//Zuweisung GridBagLayout
    public void gbl(int gx, int gy, int gw, int gh) {
        gbc.gridx = gx;
        gbc.gridy = gy;
        gbc.gridwidth = gw;
        gbc.gridheight = gh;
    }
    
//Fensteraufbau
    
    public void fenster() {
        
        //Versorger Info
        JLabel infoVersorger = new JLabel("Versorger: innogy Direkt");
        gbl(0, 0, 3, 1);
//        gbc.anchor = GridBagConstraints.CENTER;
        add(infoVersorger, gbc);
        
        JLabel preise = new JLabel("Grundgebühr: 97,35 €, 28,01 ct/kWh");
        gbl(0, 1, 3, 1);
        add(preise, gbc);
        
        JLabel vorjahresstand = new JLabel("Vorjahresstand 1.148,80 kWh");
        gbl(0, 2, 3, 1);
        add(vorjahresstand, gbc);
        
        JLabel vorjahresschlussbetrag = new JLabel("Vorjahresschlußbetrag 416,89 €");
        gbl(0, 3, 3, 1);
        add(vorjahresschlussbetrag,gbc);
        
        //Atueller Stand
        JLabel aktuellerStand = new JLabel("Aktueller Stand:");
        gbl(0, 4, 1, 1);
        gbc.anchor = GridBagConstraints.LINE_START;
        add(aktuellerStand, gbc);
        
        tFAktStndAus = new JTextField();
        tFAktStndAus.setBackground(UIManager.getColor("Button.background"));
        tFAktStndAus.setPreferredSize(new Dimension(120, 20));
        gbl(1, 4, 1, 1);
        add(tFAktStndAus, gbc);
        
        JLabel aktuellerStandEin = new JLabel(kwh);
        gbl(2, 4, 1, 1);
        add(aktuellerStandEin, gbc);
        
        //Aktueller Rechnungsbetrag
        JLabel lblAktRchnBtrg = new JLabel("Akt. Rechnungsbetrag:");
        gbl(0, 5, 1, 1);
        add(lblAktRchnBtrg, gbc);
        
        tFaktRchBtrgAus = new JTextField();
        tFaktRchBtrgAus.setBackground(UIManager.getColor("Button.background"));
        tFaktRchBtrgAus.setPreferredSize(new Dimension(120, 20));
        gbl(1, 5, 1, 1);
        add(tFaktRchBtrgAus, gbc);
        
        JLabel rechnungsbetragEin = new JLabel(euro + "");
        gbl(2, 5, 1, 1);
        add(rechnungsbetragEin, gbc);
        
        //Differenz Vohrjahr
        JLabel lblDiffVjS = new JLabel("Differenz Vorjahr:");
        gbl(0, 6, 1, 1);
        add(lblDiffVjS, gbc);
        
        tFdiffAus = new JTextField();
        tFdiffAus.setBackground(UIManager.getColor("Button.background"));
        tFdiffAus.setPreferredSize(new Dimension(120, 20));
        gbl(1, 6, 1, 1);
        add(tFdiffAus, gbc);
        
        JLabel differenzVJein = new JLabel(euro + "");
        gbl(2, 6, 1, 1);
        add(differenzVJein, gbc);
        
        //Action und Eingabe
        JLabel lblAktKwhEin = new JLabel("Zählerstand:");
        gbl(0, 7, 1, 1);
        add(lblAktKwhEin, gbc);
        
        tFaktKwhEin = new JTextField();
        tFaktKwhEin.setBackground(UIManager.getColor("Button.background"));
        tFaktKwhEin.setPreferredSize(new Dimension(120, 20));
        gbl(1, 7, 1, 1);
        add(tFaktKwhEin, gbc);
        
        JLabel aktuelleEingabeEin = new JLabel(kwh);
        gbl(2, 7, 1, 1);
        add(aktuelleEingabeEin, gbc);
        
        JButton btnOkStr = new JButton("OK");
        gbl(1, 8, 1, 1);
        gbc.ipadx = 3;
        gbc.ipady = 3;
        gbc.anchor = GridBagConstraints.CENTER;
        btnOkStr.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                stromDoubEingabe = Double.parseDouble(tFaktKwhEin.getText());
                stromVerrechnen();
                tFaktRchBtrgAus.setText(aktBtrg + "");
                tFdiffAus.setText(diffVrJhr + "");
                tFAktStndAus.setText(aktStnd + "");
            }
        });
        add(btnOkStr, gbc);
    }
    
    
}
Java:
package Hauptprogramm;

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.WindowConstants;


public class Verbrauchsrechner extends JFrame {
    
    /**
     * Verbrauchsrechner Version 2.0
     * @author mastershredder
     */
    
    //Konstruktor für Fensteraufbau
        public Verbrauchsrechner() {
            setLayout(new FlowLayout());
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);   
        }

    public static void main(String[] args) {
        
        //Fenster erstellen
                Verbrauchsrechner hFenster = new Verbrauchsrechner();
                                
        //Panels einfügen
                GasPanel gp = new GasPanel();
                gp.fenster();
                hFenster.add(gp);
                
                StromPanel sp = new StromPanel();
                sp.fenster();
                hFenster.add(sp);
                
                
                //Fenster Optionen: Fenster anzeigen
                
                hFenster.pack();
                hFenster.setVisible(true);

    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Interface Beide Panels zeigen das Gleiche Java Basics - Anfänger-Themen 2
S Interface (WindowBuilder) Panels in einen Frame einfügen Java Basics - Anfänger-Themen 10
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
Y Panels sichtbarkeit Java Basics - Anfänger-Themen 3
A mehrere Panels in eigenen Klasssen in einem Frame Java Basics - Anfänger-Themen 16
D ItemsateChangeEvent über 3 Panels Java Basics - Anfänger-Themen 1
B Drag & Drop für Panels Java Basics - Anfänger-Themen 6
M Panels untereinander anordnen Java Basics - Anfänger-Themen 3
L Panels zur Laufzeit ändern Java Basics - Anfänger-Themen 2
K Panels, grafische Oberflächen Java Basics - Anfänger-Themen 7
Spin Einfache Anfänger Frage setVisible von Panels Java Basics - Anfänger-Themen 5
S 2 Panels in einen Frame Java Basics - Anfänger-Themen 5
H Panels in Frame einbinden Java Basics - Anfänger-Themen 3
M Layered Panels Java Basics - Anfänger-Themen 5
I 1 Frame und mehrere Panels klappt nicht Java Basics - Anfänger-Themen 4
M Zwei Panels, die sich gegenseitig 'notifyn' sollen Java Basics - Anfänger-Themen 12
M Panels regelmässig neu positionieren Java Basics - Anfänger-Themen 11
M Automatische Anordnung und Benennung von Panels Java Basics - Anfänger-Themen 2
M zufällige auswahl eines Panels aus Grid Layout Java Basics - Anfänger-Themen 3
J checkBoxen Panels Java Basics - Anfänger-Themen 12
_deleted Mehrere Panels untereinander im JScrollPane Java Basics - Anfänger-Themen 4
L Problem mit dem Anzeigen eines Panels Java Basics - Anfänger-Themen 2
T Animation übermalt panels Java Basics - Anfänger-Themen 6
G Panels und Buttons Java Basics - Anfänger-Themen 5
M Vers. Panels im Frame laden von vers. Panels Java Basics - Anfänger-Themen 5
T Auf Objekte innerhalb eines Panels zugreifen Java Basics - Anfänger-Themen 9
G Zwei Panels übereinander Java Basics - Anfänger-Themen 14
G problem mit panels Java Basics - Anfänger-Themen 2
S rumprobieren mit Panels Java Basics - Anfänger-Themen 5
M Auf Panels oder Labels malen? (paint) Java Basics - Anfänger-Themen 9
J Java und das Anzeigen von Panels Java Basics - Anfänger-Themen 15
R KeyListener, 2 Panels und 5 Buttons Java Basics - Anfänger-Themen 6
H Bilder in Panels einfügen? Java Basics - Anfänger-Themen 4
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
W ListView komplett anzeigen Java Basics - Anfänger-Themen 2
BeginnerJava "Weihnachtsbäume" anzeigen: Höhe als Parameter Java Basics - Anfänger-Themen 1
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
D Erste Schritte png in JFrame anzeigen? Java Basics - Anfänger-Themen 3
M PNG als Spieler im Fenster anzeigen Java Basics - Anfänger-Themen 4
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
M Rekursives Programm zum Anzeigen von Primzahlen Java Basics - Anfänger-Themen 3
Rubberduck Combobox-Werte in GUI anzeigen Java Basics - Anfänger-Themen 13
J Die größte Zahl anzeigen Java Basics - Anfänger-Themen 19
V_Fynn03 Kontostand anzeigen lassen von einer anderen Klasse Java Basics - Anfänger-Themen 3
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
J Einen Buttonklick in Label anzeigen Java Basics - Anfänger-Themen 6
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
A ArrayList - size() nur nach bestimmtem index anzeigen lassen Java Basics - Anfänger-Themen 13
S ArrayListe in einer JComboBox anzeigen Java Basics - Anfänger-Themen 10
C Methoden Dateien im Ordner anzeigen Java Basics - Anfänger-Themen 12
M Vererbung Ein JLabel einer Elternklasse anzeigen Java Basics - Anfänger-Themen 8
A Jdialog nur 1x anzeigen Java Basics - Anfänger-Themen 2
J Wie kann ich Images per Tastendruck anzeigen/einfügen? Java Basics - Anfänger-Themen 3
T Positionen anzeigen Java Basics - Anfänger-Themen 6
M Probleme mit Anzeigen von String in GUI und if-Anweisung Java Basics - Anfänger-Themen 9
N Datei einlesen und grafisch anzeigen Java Basics - Anfänger-Themen 31
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
W Erste Schritte Zweidimensionales Array - Gerade Zahlen anzeigen lassen Java Basics - Anfänger-Themen 3
S eingegebene Matrix anzeigen Java Basics - Anfänger-Themen 4
T Kamerabild anzeigen Java Basics - Anfänger-Themen 1
J JPG in JFrame anzeigen lassen Java Basics - Anfänger-Themen 3
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
I A0-Format in jpanel anzeigen Java Basics - Anfänger-Themen 1
A Link in der Eingabeleiste nichr anzeigen Java Basics - Anfänger-Themen 1
C Methoden aus Klassen anzeigen lassen Java Basics - Anfänger-Themen 14
T Output in CMD anzeigen lassen? Java Basics - Anfänger-Themen 1
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
L Videos in Java anzeigen lassen Java Basics - Anfänger-Themen 10
M Wert aus String Feld anzeigen Java Basics - Anfänger-Themen 7
C JComboBox "Hilfstext" anzeigen Java Basics - Anfänger-Themen 11
C Html in einem JEditorPane anzeigen Java Basics - Anfänger-Themen 2
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
W Frame in anderer Klasse anzeigen lassen Java Basics - Anfänger-Themen 1
D Externe Eeite beim Mousover anzeigen Java Basics - Anfänger-Themen 0
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
L Über 100e Werte anzeigen Java GUI Java Basics - Anfänger-Themen 1
R File chooser Dateien in frame anzeigen lassen Java Basics - Anfänger-Themen 5
T JLabel anzeigen lassen... Java Basics - Anfänger-Themen 6
H Erste Schritte Uhrzeit anzeigen in Minuten Dezimal Java Basics - Anfänger-Themen 8
A Datum zwischen zwei Daten berechnen und in Tagen anzeigen Java Basics - Anfänger-Themen 4
B Variable im Fenster anzeigen lassen? Java Basics - Anfänger-Themen 2
L bestimmten Frame anzeigen lassen? Java Basics - Anfänger-Themen 6
P JTabel größe ändern und button anzeigen Java Basics - Anfänger-Themen 5
D Dialoge anzeigen Java Basics - Anfänger-Themen 9
M Icon laden und anzeigen Java Basics - Anfänger-Themen 2
M Auslesen - Anzeigen - Schreiben Java Basics - Anfänger-Themen 13
K wie Datum in JTable anders anzeigen lassen Java Basics - Anfänger-Themen 2
X Methode in JTextArea anzeigen lassen Java Basics - Anfänger-Themen 18
J Ladebalken anzeigen während Bilder geladen werden Java Basics - Anfänger-Themen 2
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
M Website anzeigen Java Basics - Anfänger-Themen 4
P Erste Schritte Image anzeigen in ausführbarer jar mit der Toolkit class Java Basics - Anfänger-Themen 8
C Button - neues Fenster - Bestellung anzeigen Java Basics - Anfänger-Themen 10
H Java Server/Client, HTML Seite anzeigen Java Basics - Anfänger-Themen 2
B JFrame - Namen anzeigen Java Basics - Anfänger-Themen 2
M Array von Personen anzeigen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben