LayoutManager Layout Problem

Brayn

Mitglied
Guten Tag,



Ich will ich ein für mich, größeres Programm (eine art Rechner) schreiben.
Es soll ein Hauptfenster enthalten, aus dem man zwischen vier Buttons wählen kann: Normal, Fläche, Volumen und Funktion. Das Hauptfenster habe ich fertig. Nun geht es zu den Unterfenstern jetzt hänge ich am Normal, das soll einen ganz normalen Taschenrechner gleichen.

Hier mal der Code

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class Normal extends JFrame {

    JPanel ausgabe = new JPanel();
    JPanel tasten = new JPanel();
    JPanel platzhalter1 = new JPanel();
    JPanel platzhalter2 = new JPanel();






    public Normal(){
        super("Normal");


        TextField anzeige = new TextField("Machen Sie ihre Eingabe",75);
        

        ausgabe.add(anzeige);
        ausgabe.setPreferredSize(new Dimension(300, 100));

        
        
        
        JButton b1 = new JButton("7");
        JButton b2 = new JButton("8");
        JButton b3 = new JButton("9");
        JButton op1 = new JButton(":");
        JButton b4 = new JButton("4");
        JButton b5 = new JButton("5");
        JButton b6 = new JButton("6");
        JButton op2 = new JButton("*");
        JButton b7 = new JButton("1");
        JButton b8 = new JButton("2");
        JButton b9 = new JButton("3");
        JButton op3 = new JButton("-");
        JButton b10 = new JButton("0");
        JButton b11 = new JButton(",");
        JButton b12 = new JButton("+");
        JButton op4 = new JButton("=");
   
        

        
        tasten.setLayout(new GridLayout(4,4,20,20));
        b1.setPreferredSize(new Dimension(50, 50));
        b2.setPreferredSize(new Dimension(50, 50));
        b3.setPreferredSize(new Dimension(50, 50));
        op1.setPreferredSize(new Dimension(50, 50));
        b4.setPreferredSize(new Dimension(50, 50));
        b5.setPreferredSize(new Dimension(50, 50));
        b6.setPreferredSize(new Dimension(50, 50));
        op2.setPreferredSize(new Dimension(50, 50));
        b7.setPreferredSize(new Dimension(50, 50));
        b8.setPreferredSize(new Dimension(50, 50));
        b9.setPreferredSize(new Dimension(50, 50));
        op3.setPreferredSize(new Dimension(50, 50));
        b10.setPreferredSize(new Dimension(50, 50));
        b11.setPreferredSize(new Dimension(50, 50));
        b12.setPreferredSize(new Dimension(50, 50));
        op4.setPreferredSize(new Dimension(50, 50));


        platzhalter1.setPreferredSize(new Dimension(200, 100));
        platzhalter2.setPreferredSize(new Dimension(200, 100));


        tasten.add(b1);
        tasten.add(b2);
        tasten.add(b3);
        tasten.add(op1);
        tasten.add(b4);
        tasten.add(b5);
        tasten.add(b6);
        tasten.add(op2);
        tasten.add(b7);
        tasten.add(b8);
        tasten.add(b9);
        tasten.add(op3);
        tasten.add(b10);
        tasten.add(b11);
        tasten.add(b12);
        tasten.add(op4);

         getContentPane().add(BorderLayout.NORTH, ausgabe);
         getContentPane().add(BorderLayout.CENTER, tasten);
         getContentPane().add(BorderLayout.EAST,platzhalter1);
         getContentPane().add(BorderLayout.WEST, platzhalter2);



    }



    public static void main(String[] args){

        Normal n = new Normal();
        n.setSize(800,500);
        n.setLocation(400,300);
        n.setVisible(true);




    }

}




Mein Problem ist ich möchte dass die Tasten die Größe haben die ich angebe beispielsweise 50*50. Wenn ich das Panel der Buttons dann mit dem BorderLayout ins CENTER lege, nehmen die Buttons aber die Größe 50*50 nicht an, sondern sind ca. 130*70. Dann viel mir ein ich könnte die seitlichen Teile des BorderLayout also WEST und EAST einfach als Platzhalter leer lassen, dann dürfte das CENTER gar nicht erst soweit aufgehen sonst gingen die Buttons halt immer bis zum Rand des Fensters. Das hat dann auch gut Funktioniert aber das muss doch auch anders gehen.

Dann würde ich gerne noch die Größe des TextField vergrößern, am besten dynamisch, denn die Buttons vergrößern sich schließlich auch dynamisch.

Kann mir jemand einen Rat geben?


Abschließend noch eine Frage.
Der Button "Funktionen" im Hauptfenster soll wie der Name schon sagt Graphen von Funktionen zeichnen können, unser Mathe Prof. hat mit Informatikern ein Programm entwickelt dass Funktionsgraphen in Echtzeit darstellen lässt, also man gibt eine Funktion an und der Graph wird gezeichnet, denkt ihr ich bekomme dass auch hin? ;)


liebe Grüße Matthias
 

dehlen

Bekanntes Mitglied
Beim BorderLayout gelten folgende Regeln:
Nord- und Südelement behalten ihre gewünschte Höhe, werden aber auf die volle Fensterbreite skaliert.
Ost- und Westelement behalten ihre gewünschte Breite, werden aber in der Höhe so skaliert, daß sie genau zwischen Nord- und Südelement passen.
Das Mittelelement wird in der Höhe und Breite so angepaßt, daß es den verbleibenden freien Raum einnimmt.

EDIT: Schau mal in die Java Api da gibt es die Methoden maximumLayoutSize und minimumLayoutSize
das müsste eigentlich dein Problem lösen denke ich
 
Zuletzt bearbeitet:

Brayn

Mitglied
Hi,

ich hab mir mal die doc angesehen, aber leider nichts hilfreiches gefunden. Ich muss gestehen ich habe mich bisher auch noch nicht mit der doc auseinander gesetzt. Deshalb weiß ich wahrscheinlich nichtmal wie ich suchen muss. Das einzige was ich gefunden habe ist dass hier:

minimumLayoutSize

Dimension minimumLayoutSize(Container parent)

Calculates the minimum size dimensions for the specified container, given the components it contains.

Parameters:
parent - the component to be laid out
See Also:
preferredLayoutSize(java.awt.Container)

Dann hab ich wieder in meinem Java Handbuch nachgesehen und was mit setBouds gefunden aber das hat auch nicht funktioniert.
Ich hab dann mal etwas rum probiert bin aber noch zu nichts richtigen gekommen, das war meine letzte Idee, für das Panel "tasten":

Java:
tasten.add(BorderLayout.CENTER.setMaximumSize(30));

ich versteh aber nicht wieman mit einem Parameter breite und höhe angeben will :) also muss es ja falsch sein :-(

kannst du mir nochmal helfen?

liebe Grüße Matthias
 

dehlen

Bekanntes Mitglied
sry hatte dir auch die falsche Methode gennant die die du brauchst ist Preffered Size so ungefähr:

button.setPreferredSize(new Dimension(200, 100));

zum setBounds :
setBounds rufst du auf wenn du das Layout null setzt also keine LayoutManager verwendest das sieht dann so aus
setLayout(null);
und dann deine Komponenten per setBounds bestimmten:
textfeld.setBounds(25,25,25,25);

zum Beispiel das dementsprechend für alle deine Komponenten durchführen die erste Zahl gibt die x-Koordinate an die zweite die y-Koordinate dann breite und höhe
das kann hilfreich sein weil man sich die Komponeten genau so legen will wie man sie möchte
Nachteil: die komponten behalten ihre Größe und Position auch wenn du das Fenster vergößerst oder verkleinerst das kann ein echter Nachteil sein und zweiter Nachteil das Layout was auf dem Mac schön passt muss nicht auch gleichzeitig auf dem Windows rechner passen also ich rate schon auf jeden Fall zu einem Layout Manager und wenn das mit dem BorderLayout nicht klappt dann nimm das GridBag Layout da kannst du mit den Parametern weightx und weighty einstellen wie viel Prozent die Komponente vom verfügbaren Platz nutzen soll
 
Zuletzt bearbeitet:

Brayn

Mitglied
Hi,

danke schön schon mal für den Hinweis mit dem GridLayout, das hab ich mir auch gerade mal angesehen, mein Java Buch sagt es sei etwas schwieriger als die anderen LayoutManager aber es würde sich lohnen.

Zu dem "setPreferredSize" genau darum geht es ja, das hab ich ja schon verwendet :) schau mal bei meiner Fragestellung von Zeile 51 bis Zeile 67 deshalb wundert es mich ja, ich hab ausdrücklich die Größe angegeben doch er nimmt Sie nicht an, das ist doch Mist.

Ich habe schon den ganzen Samstag damit verbracht das richtige zu ändern, aber es ist wie du sagst, bei dem BorderLayout kann man nicht viel machen mein Tastenfeld ist jetzt schön mittig und jetzt mein TextField ist nun auch größer, doch jetzt geht es über die ganze NORTH breite und wie du sagst kann man nur die Höhe ändern. Da bleibt mir wohl kein anderer weg als doch das GridBagLayout zu lernen, ich habe noch etwas von einem FormLayout gehört, kennst du dass? Das ist leider nicht in meinem Java Buch.

liebe Grüße Matthias
 

dehlen

Bekanntes Mitglied
FormLayout hab ich noch nie gehört
So gehts wenn du das Fenster einfach kleiner machst :
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
 
public class Normal extends JFrame {
 
    JPanel ausgabe = new JPanel();
    JPanel tasten = new JPanel();
    JPanel platzhalter1 = new JPanel();
    JPanel platzhalter2 = new JPanel();
 
 
 
 
 
 
    public Normal(){
        super("Normal");
 
 
        TextField anzeige = new TextField("Machen Sie ihre Eingabe");
        
 
        ausgabe.add(anzeige);

        
        
        
        JButton b1 = new JButton("7");
        JButton b2 = new JButton("8");
        JButton b3 = new JButton("9");
        JButton op1 = new JButton(":");
        JButton b4 = new JButton("4");
        JButton b5 = new JButton("5");
        JButton b6 = new JButton("6");
        JButton op2 = new JButton("*");
        JButton b7 = new JButton("1");
        JButton b8 = new JButton("2");
        JButton b9 = new JButton("3");
        JButton op3 = new JButton("-");
        JButton b10 = new JButton("0");
        JButton b11 = new JButton(",");
        JButton b12 = new JButton("+");
        JButton op4 = new JButton("=");
   
        
 
        
        tasten.setLayout(new GridLayout(4,4,20,20));
        b1.setPreferredSize(new Dimension(50, 50));
        b2.setPreferredSize(new Dimension(50, 50));
        b3.setPreferredSize(new Dimension(50, 50));
        op1.setPreferredSize(new Dimension(50, 50));
        b4.setPreferredSize(new Dimension(50, 50));
        b5.setPreferredSize(new Dimension(50, 50));
        b6.setPreferredSize(new Dimension(50, 50));
        op2.setPreferredSize(new Dimension(50, 50));
        b7.setPreferredSize(new Dimension(50, 50));
        b8.setPreferredSize(new Dimension(50, 50));
        b9.setPreferredSize(new Dimension(50, 50));
        op3.setPreferredSize(new Dimension(50, 50));
        b10.setPreferredSize(new Dimension(50, 50));
        b11.setPreferredSize(new Dimension(50, 50));
        b12.setPreferredSize(new Dimension(50, 50));
        op4.setPreferredSize(new Dimension(50, 50));
 

 
        tasten.add(b1);
        tasten.add(b2);
        tasten.add(b3);
        tasten.add(op1);
        tasten.add(b4);
        tasten.add(b5);
        tasten.add(b6);
        tasten.add(op2);
        tasten.add(b7);
        tasten.add(b8);
        tasten.add(b9);
        tasten.add(op3);
        tasten.add(b10);
        tasten.add(b11);
        tasten.add(b12);
        tasten.add(op4);
 
         getContentPane().add(BorderLayout.NORTH, ausgabe);
         getContentPane().add(BorderLayout.CENTER, tasten);
         getContentPane().add(BorderLayout.EAST,platzhalter1);
         getContentPane().add(BorderLayout.WEST, platzhalter2);
 
 
 
    }
 
 
 
    public static void main(String[] args){
 
        Normal n = new Normal();
        n.setSize(300,300);
        n.setLocation(400,300);
        n.setVisible(true);
 
 
 
 
    }
 
}
 
Zuletzt bearbeitet:

Eldorado

Bekanntes Mitglied
Kleine Anmerkung: Wie wäre es damit die Button in ein Array zu packen. Dann könnte man die Button in einer Schleife initialisieren und adden. Das würden den Quellcode drastisch reduzieren und übersichtlicher machen.
 

Brayn

Mitglied
@dehlen, danke für deine Hilfe, ich hab mir jetzt auch mal das GridBagLayout näher angesehen, aber das ist doch etwas schwieriger, komischer weiße erscheinen die Tasten erst wenn ich mit der Maus an deren stelle vorbei gefahren bin :) weißt du wie sowas passieren kann? Ich versuche es aber noch weiter :)



@Eldorado, aber echt das hätte mir aber auch einfallen müssen :oops:
das werde ich in meinem neuen Layout dann mal berücksichtigen


liebe Grüße Matthias
 

dehlen

Bekanntes Mitglied
zeig doch mal deinen Code mit dem GridBagLayout vllt können wir dann was sehen so aus der Hüfte geschossen würde ich sagen du hast Swing und Awt komponente zusammengemischt also z.B ein awt Textfeld auf einem swing panel

siehe bei deinem obigen Code du hast ein JPanel aber ein normales Textfield das wirds sein ändere das mal zu JTextField
 

Brayn

Mitglied
Hallo dehlen,

du hattest recht ich hatte ein TextFiel statt ein JTextfield erstellt, nun hab ich ein anderes Problem und zwar hat es mit dem array zu tun was Eldorado vorgeschlagen hat. Hier mal mein Code

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Normal extends JFrame {

    
    //JFrame f = new JFrame();
    JPanel alles = new JPanel();
    //JPanel platzhalter1 = new JPanel();
    //JPanel platzhalter2 = new JPanel();

    public Normal() {


        super("Normal");


        GridBagLayout gbl = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();
        setLayout(gbl);


        JPanel ausgabe = new JPanel();
        JTextField anzeige = new JTextField("Machen Sie ihre Eingabe", 50);
        anzeige.setFont(new Font("Times New Roman", Font.BOLD, 20));
        ausgabe.add(anzeige);
        gbc = makegbc(2, 2, 0, 0);
        gbc.weightx = 90;
        gbc.weighty = 90;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.NORTH;
        gbl.setConstraints(ausgabe, gbc);
        add(ausgabe);
        pack();



        JButton[][] array = new JButton[3][3];
        array[0][0] = new JButton("7");
        array[0][1] = new JButton("8");
        array[0][2] = new JButton("9");
        array[0][3] = new JButton(":");
        array[1][0] = new JButton("4");
        array[1][1] = new JButton("5");
        array[1][2] = new JButton("6");
        array[1][3] = new JButton("*");
        array[2][0] = new JButton("1");
        array[2][1] = new JButton("2");
        array[2][2] = new JButton("3");
        array[2][3] = new JButton("-");
        array[3][0] = new JButton("0");
        array[3][1] = new JButton(",");
        array[3][2] = new JButton("+");
        array[3][3] = new JButton("=");



        JPanel tasten = new JPanel();
        tasten.add(array[0][0]);
        tasten.add(array[0][1]);
        tasten.add(array[0][2]);
        tasten.add(array[0][3]);
        tasten.add(array[1][0]);
        tasten.add(array[1][1]);
        tasten.add(array[1][2]);
        tasten.add(array[1][3]);
        tasten.add(array[2][0]);
        tasten.add(array[2][1]);
        tasten.add(array[2][2]);
        tasten.add(array[2][3]);
        tasten.add(array[3][0]);
        tasten.add(array[3][1]);
        tasten.add(array[3][2]);
        tasten.add(array[3][3]);


        gbc = makegbc(2, 2, 0, 0);
        gbc.weightx = 75;
        gbc.weighty = 75;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.SOUTH;
        gbl.setConstraints(tasten, gbc);
        add(tasten);



        tasten.setLayout(new GridLayout(4, 4, 10, 10));
        array[0][0].setPreferredSize(new Dimension(50, 50));
        array[0][1].setPreferredSize(new Dimension(50, 50));
        array[0][2].setPreferredSize(new Dimension(50, 50));
        array[0][3].setPreferredSize(new Dimension(50, 50));
        array[1][0].setPreferredSize(new Dimension(50, 50));
        array[1][1].setPreferredSize(new Dimension(50, 50));
        array[1][2].setPreferredSize(new Dimension(50, 50));
        array[1][3].setPreferredSize(new Dimension(50, 50));
        array[2][0].setPreferredSize(new Dimension(50, 50));
        array[2][1].setPreferredSize(new Dimension(50, 50));
        array[2][2].setPreferredSize(new Dimension(50, 50));
        array[2][3].setPreferredSize(new Dimension(50, 50));
        array[3][0].setPreferredSize(new Dimension(50, 50));
        array[3][1].setPreferredSize(new Dimension(50, 50));
        array[3][2].setPreferredSize(new Dimension(50, 50));
        array[3][3].setPreferredSize(new Dimension(50, 50));




        //platzhalter1.setPreferredSize(new Dimension(150, 150));
        //platzhalter2.setPreferredSize(new Dimension(150, 150));

        //f.setLayout(new GridLayout(1,1,40,40));


//        getContentPane().add(BorderLayout.NORTH, ausgabe);
//        getContentPane().add(BorderLayout.CENTER, tasten);
//        getContentPane().add(BorderLayout.EAST,platzhalter1);
//        getContentPane().add(BorderLayout.WEST, platzhalter2);

//        anzeige.setPreferredSize(new Dimension(75, 50));
//        ausgabe.setPreferredSize(new Dimension(8, 70));
//        tasten.setPreferredSize(new Dimension(300, 300));

    }

    private GridBagConstraints makegbc(int x, int y, int width, int height) {

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.insets = new Insets(20, 100, 20, 100);
        return gbc;
    }


    public static void main(String[] args) {

        Normal n = new Normal();
        JButton[][] array = new JButton[3][3];
        n.setSize(800, 500);
        n.setLocation(400, 300);
        n.setVisible(true);

    }
}

Als Fehler sagt er Exeption in thread "main" Java.lang.ArrayIndexOutOfBoundsException: 3
at Normal.<init>(Normal.java:44)
at Normal.main(Normal.java:44)

Das ist hoffentlich nur ein kleiner dummer Fehler und kein großes Ding sonst Blamier ich mich nochmal auf neue :oops:



Danke nochmal, dass du dir so die Zeit für mich nimmst :)

liebe Grüße Matthias
 

dehlen

Bekanntes Mitglied
Also um ehrlich zu sein verzweifel ich auch immer an Arrays aber ich denke was eldorado meinte war eine for schleife hochzählen zu lassen und somit den buttons dann den Index zu geben weil so wie du es gerade machst ist es nicht weniger Schreibarbeit als vorher

Also nun mal Hypothetisch mit 20 Buttons das müsste dann denke ich so aussehen:
Java:
Button button[] = new Button[20];
Panel panel1 = new Panel();

panel1.setLayout(new GridLayout(5, 4, 4, 4));
 for (int i = 0; i < 20; i = i + 1) {
button[i] = new Button("");
panel1.add(button[i]);
add(panel1);
 

Brayn

Mitglied
Ja du hast schon recht, die Version vorher war mindestens genauso schreib aufwendig :)

Ich hab das jetzt mal etwas verändert, mittlerweile läuft das ganze auch wieder, aber jetzt habe ich schon wieder das alte Problem mit der Maus und den Buttons ich habe ja wie du schon geschrieben hast das TextField zu JTextField verändert doch ich werde noch wahnsinnig mit dem GridBagLayout, erstens scheint es so als würde er meine Eingaben bei "gbc = makegbc(2, 2, 0, 0);" ignorieren und genauso auch bei "gbc.weightx = 100;" und "gbc.weighty = 100;" Was ich noch garnicht verstehe ist wie ich mit einem solchen Ausdruck das "ausgaben" Panel in NORTH legen kann und gleichzeitig das tasten Panel in CENTER oder ... mhh das hab ich noch garnicht versucht muss ich für jede andere anordnung ein eigenen Audruck schreiben und den als Block mit geschweiften Klammern umgeben?(sry fällt ist mir gerade beim schreiben eingefallen)

Hier mal wieder mein Code:


Java:
gbc = makegbc(2, 2, 0, 0);
        gbc.weightx = 100;
        gbc.weighty = 100;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.NORTH;

        gbl.setConstraints(ausgabe, gbc);
        gbl.setConstraints(tasten, gbc);
        add(ausgabe);
        add(tasten);
        pack();



Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Normal extends JFrame {

    JFrame f = new JFrame();
    JPanel alles = new JPanel();
    JPanel tasten = new JPanel();
    JButton[] array = new JButton[16];

    public Normal() {


        super("Normal");


        GridBagLayout gbl = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();
        setLayout(gbl);


        JPanel ausgabe = new JPanel();
        JTextField anzeige = new JTextField("Machen Sie ihre Eingabe", 50);
        anzeige.setFont(new Font("Times New Roman", Font.BOLD, 20));
        ausgabe.add(anzeige);



        array[0] = new JButton("7");
        array[1] = new JButton("8");
        array[2] = new JButton("9");
        array[3] = new JButton(":");
        array[4] = new JButton("4");
        array[5] = new JButton("5");
        array[6] = new JButton("6");
        array[7] = new JButton("*");
        array[8] = new JButton("1");
        array[9] = new JButton("2");
        array[10] = new JButton("3");
        array[11] = new JButton("-");
        array[12] = new JButton("0");
        array[13] = new JButton(",");
        array[14] = new JButton("+");
        array[15] = new JButton("=");



        tasten.setLayout(new GridLayout(4, 4, 4, 4));
        for (int i = 0; i < 16; i++) {
            tasten.add(array[i]);
            array[i].setPreferredSize(new Dimension(50, 50));

        }


        gbc = makegbc(2, 2, 0, 0);
        gbc.weightx = 100;
        gbc.weighty = 100;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.NORTH;

        gbl.setConstraints(ausgabe, gbc);
        gbl.setConstraints(tasten, gbc);
        add(ausgabe);
        add(tasten);
        pack();



    }

    private GridBagConstraints makegbc(int x, int y, int width, int height) {

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = x;
        gbc.gridy = y;
        gbc.gridwidth = width;
        gbc.gridheight = height;
        gbc.insets = new Insets(10, 10, 10, 10);
        return gbc;
    }

    public static void main(String[] args) {

        Normal n = new Normal();
        n.setSize(800, 500);
        n.setLocation(400, 300);
        n.setVisible(true);

    }
}

Ich hoffe ich nerve dich mit meinen Prblemen nicht all zu sehr :)

liebe Grüße Matthias
 

dehlen

Bekanntes Mitglied
also 1) du hast ja immer noch diesen riesen code
mit den arrays
2) weighty und weightx entweder 1 oder 0 setzten
3) wenn du mit dem GridBagLayout nicht klar kommst wieso machst du nicht für die Buttons wie du es schon so ähnlich hast ein GridLayout und dann das Textfeld per BorderLayout in North

versuch das nochmal und dann schauen wir
 

L-ectron-X

Gesperrter Benutzer
Hier mal eine funktionstüchtige Vorlage, an der du weiter basteln kannst.

Java:
import java.awt.*;
import javax.swing.*;

public class CalculatorPanel extends JPanel {
  private JLabel display;
  private JButton[] numberKey;
  private JButton resultKey, plusKey, minusKey, multiplyKey, divisionKey, pointKey;
  private JButton resetKey;
  
  public CalculatorPanel() {
    super(new BorderLayout(5, 5));
    display = new JLabel("0");
    display.setBorder(BorderFactory.createLoweredBevelBorder());
    display.setFont(display.getFont().deriveFont(30f));
    display.setHorizontalAlignment(SwingConstants.RIGHT);
    add(display, BorderLayout.NORTH);
    
    JPanel keyPad = new JPanel(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    
    numberKey = new JButton[10];
    for(int i = 0; i < numberKey.length; i++) {
      numberKey[i] = new JButton(String.valueOf(i));
      numberKey[i].setPreferredSize(new Dimension(50, 50));
    }
    
    gbc.gridx = 2;
    gbc.gridy = 1;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    gbc.insets = new Insets(1, 1, 1, 1);
    for(int i = numberKey.length-1; i > -1; i--, gbc.gridx--) {
      if(i == 0) {
        gbc.gridx = 0;
      }
      keyPad.add(numberKey[i], gbc);
      if(gbc.gridx == 0) {
        gbc.gridx = 3;
        gbc.gridy++;
      }
    }
    
    resultKey = new JButton("=");
    plusKey = new JButton("+");
    minusKey = new JButton("-");
    multiplyKey = new JButton("*");
    divisionKey = new JButton("/");
    pointKey = new JButton(",");
    resetKey = new JButton("C");
    
    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.gridwidth = 2;
    resetKey.setPreferredSize(new Dimension(50, 50));
    keyPad.add(resetKey, gbc);
    
    gbc.gridx = 1;
    gbc.gridy = 4;
    gbc.gridwidth = 1;
    pointKey.setPreferredSize(new Dimension(50, 50));
    keyPad.add(pointKey, gbc);
    
    gbc.gridx = 2;
    resultKey.setPreferredSize(new Dimension(50, 50));
    keyPad.add(resultKey, gbc);
    
    gbc.gridx = 3;
    gbc.gridy = 1;
    plusKey.setPreferredSize(new Dimension(50, 50));
    keyPad.add(divisionKey, gbc);
    
    gbc.gridy++;
    minusKey.setPreferredSize(new Dimension(50, 50));
    keyPad.add(multiplyKey, gbc);
    
    gbc.gridy++;
    multiplyKey.setPreferredSize(new Dimension(50, 50));
    keyPad.add(minusKey, gbc);
    
    gbc.gridy++;
    divisionKey.setPreferredSize(new Dimension(50, 50));
    keyPad.add(plusKey, gbc);
    
    add(keyPad, BorderLayout.CENTER);
  }
  
  public static void main(String[] args) {
    JFrame frame = new JFrame("Calculator");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(new CalculatorPanel());
    frame.pack();
    frame.setLocationByPlatform(true);
    frame.setVisible(true);
  }
}
 

Brayn

Mitglied
Hallo L-ectron-X,

danke schön da hattest du aber bestimmt viel Arbeit gehabt. Aber jetzt hab ich einen Ansatzpunkt und kann mich mal mit diesrer Form an andere Fenster waagen :) danke schön nochmal.

liebe Grüße Matthias
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Layout - Problem AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
F Layout-Problem AWT, Swing, JavaFX & SWT 2
D Problem mit 3-Spalten Layout AWT, Swing, JavaFX & SWT 17
A Problem mit Layout-Manager AWT, Swing, JavaFX & SWT 11
A SWT Layout Problem AWT, Swing, JavaFX & SWT 15
K Swing Layout-Problem mit JTables und JLists (Mindestgrößen) AWT, Swing, JavaFX & SWT 11
N SWT Einfaches Problem beim Layout AWT, Swing, JavaFX & SWT 8
V Layout Problem AWT, Swing, JavaFX & SWT 5
M JPanel Layout Problem AWT, Swing, JavaFX & SWT 11
I Layout Problem beim Skalieren AWT, Swing, JavaFX & SWT 3
T Null Layout Problem. AWT, Swing, JavaFX & SWT 3
M Layout Problem: Zentriern in Panel AWT, Swing, JavaFX & SWT 3
M Layout-Problem: JTable AWT, Swing, JavaFX & SWT 3
A Layout-Problem AWT, Swing, JavaFX & SWT 5
W SWT, Anordung von Elementen - Layout Problem ? AWT, Swing, JavaFX & SWT 2
I Null-Layout-Problem AWT, Swing, JavaFX & SWT 2
M Problem mit NULL-Layout AWT, Swing, JavaFX & SWT 2
M Problem mit Layout wegen Textarea AWT, Swing, JavaFX & SWT 3
G Layout Problem AWT, Swing, JavaFX & SWT 6
M Layout / setSize Problem AWT, Swing, JavaFX & SWT 15
M Layout Problem (GrudBag- + BorderLayout) AWT, Swing, JavaFX & SWT 6
M Layout-Problem, Größe von Komponenten AWT, Swing, JavaFX & SWT 3
S Wiedermal SWT-Layout-Problem AWT, Swing, JavaFX & SWT 6
S SWT - Simples Layout Problem AWT, Swing, JavaFX & SWT 9
M Layout Problem, Ideen gesucht AWT, Swing, JavaFX & SWT 7
H Problem mit Layout Fenstern (Swing) AWT, Swing, JavaFX & SWT 3
M Layout Problem AWT, Swing, JavaFX & SWT 3
D Layout Problem / JTree und JPanel AWT, Swing, JavaFX & SWT 4
N Layout-Problem (JScrollPane, GridBagLayout) AWT, Swing, JavaFX & SWT 3
D Layout-Problem AWT, Swing, JavaFX & SWT 8
M Problem mit Layout/JLabel AWT, Swing, JavaFX & SWT 5
D Layout Problem mit Überdeckung AWT, Swing, JavaFX & SWT 6
J Kleines Layout Problem AWT, Swing, JavaFX & SWT 5
S Problem mit dem Layout - 3 JPanel's AWT, Swing, JavaFX & SWT 3
G Layout-Problem AWT, Swing, JavaFX & SWT 4
G Problem mit JDialog-Layout AWT, Swing, JavaFX & SWT 4
F Problem mit Panel-Layout AWT, Swing, JavaFX & SWT 3
M Layout Problem. AWT, Swing, JavaFX & SWT 6
E Problem mit GridBag Layout AWT, Swing, JavaFX & SWT 2
G Layout Problem AWT, Swing, JavaFX & SWT 3
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
D Layout einer scene mit ListView Elementen und Zwei Textfeldern AWT, Swing, JavaFX & SWT 1
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
R Layered Layout AWT, Swing, JavaFX & SWT 1
E showAndWait is not allowed during animation or layout processing Memory FX AWT, Swing, JavaFX & SWT 2
E Swing Layout während der Laufzeit anpassen AWT, Swing, JavaFX & SWT 3
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
S Kann javafx.scene.layout.VBoxBuilder nicht importieren AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
I JavaFX - festes Layout AWT, Swing, JavaFX & SWT 1
S JavaFX TableView einzelne Zelle Layout zuweisen AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
kilopack15 Interface mit Layout verknüpfen AWT, Swing, JavaFX & SWT 2
Y Layout/Ausrichtungsprobleme AWT, Swing, JavaFX & SWT 4
T JavaFX Custom Layout AWT, Swing, JavaFX & SWT 5
A GUI Layout AWT, Swing, JavaFX & SWT 11
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M LayoutManager Modalen JDialog ein Layout zuweisen AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout reagiert nicht auf Constraints AWT, Swing, JavaFX & SWT 4
IsSchoGuat LayoutManager Layout-Containergrösse AWT, Swing, JavaFX & SWT 4
F GridBag Layout AWT, Swing, JavaFX & SWT 1
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
J ComboBoxModel addElement verändert Layout AWT, Swing, JavaFX & SWT 8
E Probelm mit Layout AWT, Swing, JavaFX & SWT 1
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
P Tipps für GUI-Layout AWT, Swing, JavaFX & SWT 2
M Passender Layout-Manager AWT, Swing, JavaFX & SWT 3
M LayoutManager Layout zur Laufzeit ändern AWT, Swing, JavaFX & SWT 8
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
B LayoutManager Card Layout AWT, Swing, JavaFX & SWT 2
E Angehängtes Layout, aber wie? AWT, Swing, JavaFX & SWT 12
1 Eigenes Layout schreiben AWT, Swing, JavaFX & SWT 4
B SWT layout invalidieren in SWT? AWT, Swing, JavaFX & SWT 4
R Welchen Layout Manager/ Wie strukturieren? AWT, Swing, JavaFX & SWT 14
J Layout: oben 20% unten 80% AWT, Swing, JavaFX & SWT 12
T Layout für Listendarstellung AWT, Swing, JavaFX & SWT 3
F LayoutManager Null-Layout unter Linux im TreeCellEditor AWT, Swing, JavaFX & SWT 3
K Eclipse Layout (Gimp Layout, Tiled Layout...) AWT, Swing, JavaFX & SWT 4
C LayoutManager Passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
M Layout funktioniert nicht AWT, Swing, JavaFX & SWT 3
dzim Layout von Panes in JFX2 AWT, Swing, JavaFX & SWT 17
H Layout Idee AWT, Swing, JavaFX & SWT 8
M Swing Dynamisches Layout AWT, Swing, JavaFX & SWT 10
P Swing welchen Layout Manager verwenden AWT, Swing, JavaFX & SWT 9
J LayoutManager Komponentenaustausch zerschießt Layout AWT, Swing, JavaFX & SWT 4
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben