Auf MainJFrame Panels anzeigen lassen

Diskutiere Auf MainJFrame Panels anzeigen lassen im Java Basics - Anfänger-Themen Bereich.
M

MasterShredder

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);
        
    }

    
}
 
M

MasterShredder

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

MoxxiManagarm

//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:
 
M

MasterShredder

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

mihe7

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)
 
M

MasterShredder

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
 
L

LimDul

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.
 
M

MasterShredder

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??
 
M

MasterShredder

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);
 
mihe7

mihe7

Ja, Du setzt die Eigenschaft des gbc-Objekts und die bleibt natürlich so lange, bis Du sie wieder änderst.
 
M

MasterShredder

Ok,
soweit klappt mal alles. Nur muss ich jetzt jedem Element einen Wert zuweisen, oder erst wieder wenn sich die Eigenschaft ändert?
 
M

MasterShredder

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

mihe7

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/).
 
L

LimDul

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.
 
M

MasterShredder

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);

    }

}
 
Thema: 

Auf MainJFrame Panels anzeigen lassen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben