ordentliche Fenster

julian.veh

Bekanntes Mitglied
Hi

habe mal eine Frage: Und zwar ist das bei mir so, dass sich immer die Textfelder und Buttons in einem Fenster der Größe des Fensters anpassen. Also wenn ich die Größe breiter mache oder ein Label weniger bzw. mehr Zeichen hat als vorher werden die Textfelder immer größer und kleiner und das sieht ziemlich bescheiden aus ^^. Ich verwende das Box Layout, falls es damit zusammenhängt.
Könnt ihr mir sagen wie ich den Textfeldern und Buttons eine feste Größe zuweise?

lG :)
 

Volvagia

Top Contributor
LayoutManager ordnen entweder nach fixer Größe oder dynamisch an. Das BorderLayout ordnet z. B. 2 jeweils in fixer Höhe und dynamischer Breite, 2 in fixer Breite und dynamischer Höhe und eins nur dynamisch. Das GridLayout nach der größten Komponenten (oder 2 größten Komponenten wenn sie sich jeweils in Breite und Höhe übertreffen).

Zeig am Besten mal deinen Source, damit man sich selbst ein Bild von der Anordnung machen kann. Das BoxLayout sollte aber eigendlich nach fixer Größe anordnen.
 

julian.veh

Bekanntes Mitglied
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class Fenster 
{
    private JTextField tfzaehler1;
    private JTextField tfnenner1;
    private JTextField tfzaehler2;
    private JTextField tfnenner2; 
    private JComboBox rzauswahl;
    private JButton button1;
    private final JLabel lzaehler;
    private final JLabel lnenner;   
    private String comboBoxListe[] = {"+", "-","*", "/"};
    private String selectedValueString; 
    private int moeglichkeit;
    private int izaehlere;
    private int inennere;
    private final String zaehlere = "0";
    private String nennere = "0";

    public void getValue()
    {
        Object object = rzauswahl.getSelectedItem();
        if(object != null) 
        {
            selectedValueString = object.toString();
        } 
        else 
        {
            throw new IllegalStateException("No item selected.");
        }
        if(selectedValueString == "+")
        {
            moeglichkeit = 1;
        }
        if(selectedValueString == "-")
        {
            moeglichkeit = 2;
        }
        if(selectedValueString == "*")
        {
            moeglichkeit = 3;
        }
        if(selectedValueString == "/")
        {
            moeglichkeit = 4;
        }
    }
    public Fenster()
    {
        JFrame frame1 = new JFrame();
        frame1.setSize(500,100);
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.tfzaehler1 = new JTextField("Zaehler 1");
        this.tfnenner1 = new JTextField("Nenner 1");
        this.tfzaehler2 = new JTextField("Zaehler 2");
        this.tfnenner2 = new JTextField("Nenner 2");
        this.button1 = new JButton("=");
        this.lzaehler = new JLabel("Zaehler");
        this.lnenner = new JLabel("Nenner");
        this.rzauswahl = new JComboBox(comboBoxListe);
        
        button1.addActionListener(new ActionListener() {   @Override
                                                            public void actionPerformed(ActionEvent action)
                                                            {
                                                                String szaehler1;
                                                                String snenner1;
                                                                String szaehler2;
                                                                String snenner2;
                                                                szaehler1 = tfzaehler1.getText();
                                                                snenner1 = tfnenner1.getText();
                                                                szaehler2 = tfzaehler2.getText();
                                                                snenner2 = tfnenner2.getText();
                                                                int zaehler1 = Integer.parseInt(szaehler1);
                                                                int nenner1 = Integer.parseInt(snenner1);
                                                                int zaehler2 = Integer.parseInt(szaehler2);
                                                                int nenner2 = Integer.parseInt(snenner2);
                                                                Bruch br1 = new Bruch(zaehler1, nenner1);
                                                                Bruch br2 = new Bruch(zaehler2, nenner2);
                                                                getValue();
                                                                if(moeglichkeit == 1)
                                                                {
                                                                    System.out.println("+");
                                                                    Bruchrechner brr = new Bruchrechner();
                                                                    brr.addieren(br1, br2);
                                                                    izaehlere = brr.zaehlerE;
                                                                    inennere = brr.nennerE;
                                                                    
                                                                    lzaehler.setText("" + izaehlere);
                                                                    lnenner.setText("" + inennere);
                                                                }
                                                                if(moeglichkeit == 2)
                                                                {
                                                                    System.out.println("-");
                                                                }
                                                                if(moeglichkeit == 3)
                                                                {
                                                                    System.out.println("*");
                                                                }
                                                                if(moeglichkeit == 4)
                                                                {
                                                                    System.out.println("/");
                                                                }
                                                            }
        });

        Box container1 = new Box(BoxLayout.X_AXIS);
        Box container2 = new Box(BoxLayout.Y_AXIS);
        Box container3 = new Box(BoxLayout.Y_AXIS);
        Box container4 = new Box(BoxLayout.Y_AXIS);
        Box container5 = new Box(BoxLayout.Y_AXIS);
        Box container6 = new Box(BoxLayout.Y_AXIS);

        container2.add(tfzaehler1);
        container2.add(tfnenner1);
        container3.add(rzauswahl);
        container4.add(tfzaehler2);
        container4.add(tfnenner2);
        container5.add(button1);
        container6.add(lzaehler);
        container6.add(lnenner);
        container1.add(container2);
        container1.add(container3);
        container1.add(container4);
        container1.add(container5);
        container1.add(container6);
        frame1.add(container1);
        frame1.setVisible(true);
    }

    public static void main (String[] args)
    {
        new Fenster();
    }
}
 

julian.veh

Bekanntes Mitglied
So, danke :)
Also das erste ist ein Screenshot von meinem Fenster und das 2. ein das was ich erzielen will ;)

Gruß :)
 

Anhänge

  • reality.png
    reality.png
    30,1 KB · Aufrufe: 45
  • bruch-fenster.jpg
    bruch-fenster.jpg
    11,6 KB · Aufrufe: 45

Volvagia

Top Contributor
Und wie ist dein Problem?
Wenn du die Labels "Zaeler" und "Nenner" mit dem Ergebniss beschriftet werden die Textfelder kleiner? Das ist ja klar. Entweder du machst das Fenster größer, andere Komponenten kleiner, schaffst von anfang an mehr Platz für das Ergebnis oder es kann nicht richtig dargestellt werden, da nicht genug Platz übrig bleibt.

Mein Tip wäre das Ergebnis unter der Eingabe zu platzieren. Dann hängt die Breite der Eingabemaske nicht von der Breite des Ergebnisses ab.
 

L-ectron-X

Gesperrter Benutzer
Die meisten LayoutManager orientieren sich an der PreferredSize der Komponenten.
Die Anordnung erfolgt dann nach der Strategie des jeweiligen LayoutManagers.

Einige LayoutManager ignorieren auch die PreferredSize der Komponenten.
Dieses Wissen ist nötig, um den richtigen LayoutManager auszuwählen und gezielt Komponenten anordnen zu können.

Die Komponenten erhalten ihre PreferredSize per
Code:
.setPreferredSize(new Dimension(width, height));

[EDIT]An deinen Bildern ist aber schon abzulesen, dass der benutzte LayoutManager die PreferredSize ignoriert.
Du wirst also einen anderen, besser geeigneteren LayoutManager einsetzen müssen.
Auch eine Kombination von LayoutManagern durch Schachtelung wäre möglich.[/EDIT]
 

julian.veh

Bekanntes Mitglied
Java:
//tf1.setPreferredSize(new Dimension(100, 30));
        
        Box container1 = new Box(BoxLayout.Y_AXIS);
        Box container2 = new Box(BoxLayout.X_AXIS);
        Box container3 = new Box(BoxLayout.X_AXIS);
        Box container4 = new Box(BoxLayout.X_AXIS);
        //container3.setPreferredSize(new Dimension(100, 30));

tf1.setPref... funktioniert nicht und dann habe ich mal container3.setPref... probiert, das funktioniert auch nicht. Also funktioniert nicht heißt, dass das Fenster unverändert ist..
Was habe ich falsch gemacht? :)
 

Volvagia

Top Contributor
Wie wäre es damit? Boxen sind zwar für ein großes Layout sehr gut, man braucht nur leider oft recht viele davon. Das kann der Lesbarkeit imho erheblich schaden.

Java:
package julianveh;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
 
public class Fenster 
{
    private JTextField tfzaehler1;
    private JTextField tfnenner1;
    private JTextField tfzaehler2;
    private JTextField tfnenner2; 
    private JComboBox rzauswahl;
    private JButton button1;
    private final JLabel lzaehler;
    private final JLabel lnenner;   
    private String comboBoxListe[] = {"+", "-","*", "/"};
    private String selectedValueString; 
    private int moeglichkeit;
    private int izaehlere;
    private int inennere;
    private final String zaehlere = "0";
    private String nennere = "0";
 
    public void getValue()
    {
        Object object = rzauswahl.getSelectedItem();
        if(object != null) 
        {
            selectedValueString = object.toString();
        } 
        else 
        {
            throw new IllegalStateException("No item selected.");
        }
        if(selectedValueString == "+")
        {
            moeglichkeit = 1;
        }
        if(selectedValueString == "-")
        {
            moeglichkeit = 2;
        }
        if(selectedValueString == "*")
        {
            moeglichkeit = 3;
        }
        if(selectedValueString == "/")
        {
            moeglichkeit = 4;
        }
    }
    public Fenster()
    {
        JFrame frame1 = new JFrame("Bruchrechner");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        
        
        JPanel titleLabel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        titleLabel.add(new JLabel("Bruchrechnen"));
        frame1.add(titleLabel, BorderLayout.NORTH);
        
        
        
        JPanel inputPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 0));
        frame1.add(inputPanel, BorderLayout.CENTER);
        
        
        JPanel firstPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(firstPanel);
        
        this.tfzaehler1 = new JTextField("Zaehler 1", 15);
        firstPanel.add(tfzaehler1);
        
        this.tfnenner1 = new JTextField("Nenner 1", 15);
        firstPanel.add(tfnenner1);
        
        
        JPanel selectMethodPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(selectMethodPanel);
        
        
        this.rzauswahl = new JComboBox(comboBoxListe);
        selectMethodPanel.add(rzauswahl);
        
        
        JPanel secondPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(secondPanel);
        
        this.tfzaehler2 = new JTextField("Zaehler 2", 15);
        secondPanel.add(tfzaehler2);
        
        this.tfnenner2 = new JTextField("Nenner 2", 15);
        secondPanel.add(tfnenner2);
        
        JPanel buttonPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(buttonPanel);
                
        this.button1 = new JButton(new AbstractAction("=") {
			public void actionPerformed(ActionEvent e) {
				tueWas();
			}
		});
        buttonPanel.add(button1);
        
        
        JPanel resultPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(resultPanel);
        
        this.lzaehler = new JLabel("Zaehler");
        resultPanel.add(lzaehler);
        
        this.lnenner = new JLabel("Nenner");
        resultPanel.add(lnenner);

        frame1.pack();
        frame1.setLocationRelativeTo(null);
        frame1.setVisible(true);
    }
    private void tueWas() {
    	/*String szaehler1;
		String snenner1;
		String szaehler2;
		String snenner2;
		szaehler1 = tfzaehler1.getText();
		snenner1 = tfnenner1.getText();
    	szaehler2 = tfzaehler2.getText();
    	snenner2 = tfnenner2.getText();
    	int zaehler1 = Integer.parseInt(szaehler1);
    	int nenner1 = Integer.parseInt(snenner1);
    	int zaehler2 = Integer.parseInt(szaehler2);
    	int nenner2 = Integer.parseInt(snenner2);
    	Bruch br1 = new Bruch(zaehler1, nenner1);
    	Bruch br2 = new Bruch(zaehler2, nenner2);
    	getValue();
    	if(moeglichkeit == 1)
    	{
    		System.out.println("+");
    		Bruchrechner brr = new Bruchrechner();
    		brr.addieren(br1, br2);
    		izaehlere = brr.zaehlerE;
    		inennere = brr.nennerE;
    		
    		lzaehler.setText("" + izaehlere);
    		lnenner.setText("" + inennere);
    	}
    	if(moeglichkeit == 2)
    	{
    		System.out.println("-");
    	}
    	if(moeglichkeit == 3)
    	{
    		System.out.println("*");
    	}
    	if(moeglichkeit == 4)
    	{
    		System.out.println("/");
    	}*/
	}
    public static void main (String[] args) {
    	SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new Fenster();
			}
		});
    }
}

Java:
package julianveh;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;

public class VerticalMaxHeightDistanceLayout implements LayoutManager {
	public void layoutContainer(Container parent) {
		int maxHeight = getMaximalCompHeight(parent);
		int compCount = parent.getComponentCount();
		
		int y = parent.getHeight() / 2 - ((maxHeight * compCount * 2 - maxHeight) / 2);
		
		for(int i = 0, size = parent.getComponentCount(); i < size; i++) {
			Component component = parent.getComponent(i);
			
			Dimension prefSize = component.getPreferredSize();
			
			component.setLocation(0, y);
			component.setSize(prefSize.width, maxHeight);
			
			y+= maxHeight * 2;
		}		
	}
	
	private int getMaximalCompWidth(Container parent) {
		int maxWidth = 0;;
		
		for(int i = 0, size = parent.getComponentCount(); i < size; i++) {
			Component component = parent.getComponent(i);
			
			Dimension prefSize = component.getPreferredSize();
			maxWidth = Math.max(maxWidth, prefSize.width);
		}
		return(maxWidth);
	}
	private int getMaximalCompHeight(Container parent) {
		int maxHeight = 0;;
		
		for(int i = 0, size = parent.getComponentCount(); i < size; i++) {
			Component component = parent.getComponent(i);
			
			Dimension prefSize = component.getPreferredSize();
			maxHeight = Math.max(maxHeight, prefSize.height);
		}
		return(maxHeight);
	}
	public void addLayoutComponent(String name, Component comp) {}
	public void removeLayoutComponent(Component comp) {}


	
	
	public Dimension preferredLayoutSize(Container parent) {
		Dimension prefSize = new Dimension(getMaximalCompWidth(parent), 0);
		int maxHeight = getMaximalCompHeight(parent);
		prefSize.height = maxHeight * parent.getComponentCount() * 2 + (maxHeight * 2);
		return(prefSize);
	}
	public Dimension minimumLayoutSize(Container parent) {
		return(preferredLayoutSize(parent));
	}	
}
 

L-ectron-X

Gesperrter Benutzer
Das BoxLayout wurde vermutlich geschaffen, um dem relativ komplizierten aber sehr mächtigen GridBagLayout eine Alternative zu sein.
Ich kenne mich mit den BoxLayout nur rudimentär aus. In der FAQ findest du ein Beispiel und auch das Tutorial von Oracle dazu,

Ich hätte das jetzt spontan mit GridBagLayout oder mit verschachtelten Panels gelöst.
 

julian.veh

Bekanntes Mitglied
Die meisten LayoutManager orientieren sich an der PreferredSize der Komponenten.
Die Anordnung erfolgt dann nach der Strategie des jeweiligen LayoutManagers.

Einige LayoutManager ignorieren auch die PreferredSize der Komponenten.
Dieses Wissen ist nötig, um den richtigen LayoutManager auszuwählen und gezielt Komponenten anordnen zu können.

Die Komponenten erhalten ihre PreferredSize per
Code:
.setPreferredSize(new Dimension(width, height));

[EDIT]An deinen Bildern ist aber schon abzulesen, dass der benutzte LayoutManager die PreferredSize ignoriert.
Du wirst also einen anderen, besser geeigneteren LayoutManager einsetzen müssen.
Auch eine Kombination von LayoutManagern durch Schachtelung wäre möglich.[/EDIT]

Kenne mich da nicht so aus kenne nur Flow Layout und Box Layout.
Könntest du mir was sehr einfaches vorschlagen? Ansonsten gucke ich mir mal deinen Link an ;) Danke dafür :)
 

julian.veh

Bekanntes Mitglied
Wie wäre es damit? Boxen sind zwar für ein großes Layout sehr gut, man braucht nur leider oft recht viele davon. Das kann der Lesbarkeit imho erheblich schaden.

Java:
package julianveh;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
 
public class Fenster 
{
    private JTextField tfzaehler1;
    private JTextField tfnenner1;
    private JTextField tfzaehler2;
    private JTextField tfnenner2; 
    private JComboBox rzauswahl;
    private JButton button1;
    private final JLabel lzaehler;
    private final JLabel lnenner;   
    private String comboBoxListe[] = {"+", "-","*", "/"};
    private String selectedValueString; 
    private int moeglichkeit;
    private int izaehlere;
    private int inennere;
    private final String zaehlere = "0";
    private String nennere = "0";
 
    public void getValue()
    {
        Object object = rzauswahl.getSelectedItem();
        if(object != null) 
        {
            selectedValueString = object.toString();
        } 
        else 
        {
            throw new IllegalStateException("No item selected.");
        }
        if(selectedValueString == "+")
        {
            moeglichkeit = 1;
        }
        if(selectedValueString == "-")
        {
            moeglichkeit = 2;
        }
        if(selectedValueString == "*")
        {
            moeglichkeit = 3;
        }
        if(selectedValueString == "/")
        {
            moeglichkeit = 4;
        }
    }
    public Fenster()
    {
        JFrame frame1 = new JFrame("Bruchrechner");
        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        
        
        JPanel titleLabel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        titleLabel.add(new JLabel("Bruchrechnen"));
        frame1.add(titleLabel, BorderLayout.NORTH);
        
        
        
        JPanel inputPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 0));
        frame1.add(inputPanel, BorderLayout.CENTER);
        
        
        JPanel firstPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(firstPanel);
        
        this.tfzaehler1 = new JTextField("Zaehler 1", 15);
        firstPanel.add(tfzaehler1);
        
        this.tfnenner1 = new JTextField("Nenner 1", 15);
        firstPanel.add(tfnenner1);
        
        
        JPanel selectMethodPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(selectMethodPanel);
        
        
        this.rzauswahl = new JComboBox(comboBoxListe);
        selectMethodPanel.add(rzauswahl);
        
        
        JPanel secondPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(secondPanel);
        
        this.tfzaehler2 = new JTextField("Zaehler 2", 15);
        secondPanel.add(tfzaehler2);
        
        this.tfnenner2 = new JTextField("Nenner 2", 15);
        secondPanel.add(tfnenner2);
        
        JPanel buttonPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(buttonPanel);
                
        this.button1 = new JButton(new AbstractAction("=") {
			public void actionPerformed(ActionEvent e) {
				tueWas();
			}
		});
        buttonPanel.add(button1);
        
        
        JPanel resultPanel = new JPanel(new VerticalMaxHeightDistanceLayout());
        inputPanel.add(resultPanel);
        
        this.lzaehler = new JLabel("Zaehler");
        resultPanel.add(lzaehler);
        
        this.lnenner = new JLabel("Nenner");
        resultPanel.add(lnenner);

        frame1.pack();
        frame1.setLocationRelativeTo(null);
        frame1.setVisible(true);
    }
    private void tueWas() {
    	/*String szaehler1;
		String snenner1;
		String szaehler2;
		String snenner2;
		szaehler1 = tfzaehler1.getText();
		snenner1 = tfnenner1.getText();
    	szaehler2 = tfzaehler2.getText();
    	snenner2 = tfnenner2.getText();
    	int zaehler1 = Integer.parseInt(szaehler1);
    	int nenner1 = Integer.parseInt(snenner1);
    	int zaehler2 = Integer.parseInt(szaehler2);
    	int nenner2 = Integer.parseInt(snenner2);
    	Bruch br1 = new Bruch(zaehler1, nenner1);
    	Bruch br2 = new Bruch(zaehler2, nenner2);
    	getValue();
    	if(moeglichkeit == 1)
    	{
    		System.out.println("+");
    		Bruchrechner brr = new Bruchrechner();
    		brr.addieren(br1, br2);
    		izaehlere = brr.zaehlerE;
    		inennere = brr.nennerE;
    		
    		lzaehler.setText("" + izaehlere);
    		lnenner.setText("" + inennere);
    	}
    	if(moeglichkeit == 2)
    	{
    		System.out.println("-");
    	}
    	if(moeglichkeit == 3)
    	{
    		System.out.println("*");
    	}
    	if(moeglichkeit == 4)
    	{
    		System.out.println("/");
    	}*/
	}
    public static void main (String[] args) {
    	SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new Fenster();
			}
		});
    }
}

Java:
package julianveh;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;

public class VerticalMaxHeightDistanceLayout implements LayoutManager {
	public void layoutContainer(Container parent) {
		int maxHeight = getMaximalCompHeight(parent);
		int compCount = parent.getComponentCount();
		
		int y = parent.getHeight() / 2 - ((maxHeight * compCount * 2 - maxHeight) / 2);
		
		for(int i = 0, size = parent.getComponentCount(); i < size; i++) {
			Component component = parent.getComponent(i);
			
			Dimension prefSize = component.getPreferredSize();
			
			component.setLocation(0, y);
			component.setSize(prefSize.width, maxHeight);
			
			y+= maxHeight * 2;
		}		
	}
	
	private int getMaximalCompWidth(Container parent) {
		int maxWidth = 0;;
		
		for(int i = 0, size = parent.getComponentCount(); i < size; i++) {
			Component component = parent.getComponent(i);
			
			Dimension prefSize = component.getPreferredSize();
			maxWidth = Math.max(maxWidth, prefSize.width);
		}
		return(maxWidth);
	}
	private int getMaximalCompHeight(Container parent) {
		int maxHeight = 0;;
		
		for(int i = 0, size = parent.getComponentCount(); i < size; i++) {
			Component component = parent.getComponent(i);
			
			Dimension prefSize = component.getPreferredSize();
			maxHeight = Math.max(maxHeight, prefSize.height);
		}
		return(maxHeight);
	}
	public void addLayoutComponent(String name, Component comp) {}
	public void removeLayoutComponent(Component comp) {}


	
	
	public Dimension preferredLayoutSize(Container parent) {
		Dimension prefSize = new Dimension(getMaximalCompWidth(parent), 0);
		int maxHeight = getMaximalCompHeight(parent);
		prefSize.height = maxHeight * parent.getComponentCount() * 2 + (maxHeight * 2);
		return(prefSize);
	}
	public Dimension minimumLayoutSize(Container parent) {
		return(preferredLayoutSize(parent));
	}	
}

Danke, dass du dir so viel Mühe gemacht hast! Ich gucke mir das jetzt mal an, sieht nämlich was komplizierter aus ^^.

Grüße ;)
 

julian.veh

Bekanntes Mitglied
Die einzelnen Textfelder und so nochmal in ein FlowLayout, wo Lectronx's Lösung
Java:
.setPreferredSize(new Dimension(width, height));
funktioniert :)
anbei Screenshot

Danke an alle die geantwortet haben ;)
 

Anhänge

  • lösung.png
    lösung.png
    21,7 KB · Aufrufe: 35

L-ectron-X

Gesperrter Benutzer
Hier mal eine Kombination von LayoutManagern.
BorderLayout (Standard-LayoutManager) im JFrame.
GridLayout im FractionPanel
und ein FlowLayout (Standard-LayoutManager) in einem Hilfspanel, das schließlich alle Komponenten aufnimmt.

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

public class FractionCalc implements ActionListener {
   private JComboBox operationBox;
   private JButton resultBtn;
   private FractionPanel fraction1, fraction2, fractionResult;

   public FractionCalc() {
      JFrame frame = new JFrame("BruchRechner");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.add(createGui());
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setResizable(false);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {
         e.printStackTrace();
      }
      
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            new FractionCalc();
         }
      });
   }
   
   private JPanel createGui() {
      JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 20));
      resultBtn = new JButton("=");
      resultBtn.setMargin(new Insets(1, 5, 1, 5));
      resultBtn.addActionListener(this);
      
      String[] operations = new String[] {"+", "-", "<html>&middot;</html>", ":"};
      operationBox = new JComboBox(operations);
      operationBox.addActionListener(this);
      
      fraction1 = new FractionPanel();
      fraction2 = new FractionPanel();
      fractionResult = new FractionPanel(false);
      
      panel.add(fraction1);
      panel.add(operationBox);
      panel.add(fraction2);
      panel.add(resultBtn);
      panel.add(fractionResult);
      return panel;
   }
   
   class FractionPanel extends JPanel implements FocusListener {
      private JTextField denominatorTf, numeratorTf;

      public FractionPanel() {
         this(true);
      }
      
      public FractionPanel(boolean editable) {
         super(new GridLayout(0, 1, 0, 10));
         
         denominatorTf = new JTextField("Nenner", 5);
         denominatorTf.setEditable(editable);
         denominatorTf.addFocusListener(this);
         
         numeratorTf = new JTextField("Zähler", 5);
         numeratorTf.setEditable(editable);
         numeratorTf.addFocusListener(this);

         add(denominatorTf);
         add(numeratorTf);
      }
      
      public void setValues(String denominator, String numerator) {
         denominatorTf.setText(denominator);
         numeratorTf.setText(numerator);
      }
      
      /**
       * Gibt ein String-Array mit den Werten eines Bruchs zurück.
       * Der erste String im Feld (Index-Position 0) ist der Nenner (Denominator).
       * Der zweite String im Feld (Index-Position 1) ist der Zähler (Numerator).
       * @return String-Array mit den Werten des Bruchs.
       */
      public String[] getValues() {
         return new String[] {
            denominatorTf.getText().trim(), numeratorTf.getText().trim()
         };
      }
      
      protected void paintComponent(Graphics g) {
         super.paintComponent(g);
         g.drawLine(0, getSize().height/2, getSize().width, getSize().height/2);
      }
      
      public void focusLost(FocusEvent e) { }
      
      public void focusGained(FocusEvent e) {
         JTextField source = (JTextField)e.getSource();
         source.selectAll();
      }
   }
   
   public void actionPerformed(ActionEvent e) {
      Object source = e.getSource();
      if(source instanceof JComboBox) {
         System.out.println("Auswahl in JComboBox!");
      }
      else if(source instanceof JButton) {
         System.out.println("Button geklickt!");
      }
   }
}
Der größte Teil ist vorbereitet. Die Events musst du noch verarbeiten. Der Rest sollte sich eigentlich selbst erklären.
 

Anhänge

  • Bruchrechner.png
    Bruchrechner.png
    14,2 KB · Aufrufe: 41

Volvagia

Top Contributor
@julian.veh
Einen JTextField kannst du per Konstruktor die erwartete Länge (in Zeichen) übergeben, siehe mein Code. ComboBox, Button und Label haben standartgemäß nur ihre minimal benötigte Größe als Pref. Size.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Variable von 1. Fenster an 2. Fenster übergeben. Java Basics - Anfänger-Themen 7
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
J Überprüfen ob ein Fenster offen ist? Java Basics - Anfänger-Themen 8
T jOptionPane zum schließen von Fenster, wie "Ja" und "Nein" anstatt Yes und No Java Basics - Anfänger-Themen 2
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
celta_vigo Konsolen-Fenster ist weg Java Basics - Anfänger-Themen 5
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
M PNG als Spieler im Fenster anzeigen Java Basics - Anfänger-Themen 4
S JOptionPane komplett leeres Fenster Java Basics - Anfänger-Themen 4
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
A Fenster bleibt weiß Java Basics - Anfänger-Themen 7
O Fenster programmieren Java Basics - Anfänger-Themen 2
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
A Fenster programmieren Java Basics - Anfänger-Themen 1
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
M aus Fenster anderes Fenster öffnen und wieder umgekehrt Java Basics - Anfänger-Themen 5
J Best Practice DOS Fenster mit Befehlszeile (Lösung) Java Basics - Anfänger-Themen 2
J Fenster wieder unsichtbar machen Java Basics - Anfänger-Themen 2
das_leon Gesamtes Programm in einem Fenster Java Basics - Anfänger-Themen 1
E Knopfdruck neues Fenster öffnen Java Basics - Anfänger-Themen 5
A Fenster mit Button aufrufen Java Basics - Anfänger-Themen 3
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
W Es wird erst gezeichnet, wenn ich das Fenster vergrößere? Java Basics - Anfänger-Themen 20
K Interface Fenster mit 3 ComboBoxen und 1 Button Java Basics - Anfänger-Themen 13
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
I Fenster A soll Fenster B schliessen Java Basics - Anfänger-Themen 5
D Java Fenster blockiert ? Java Basics - Anfänger-Themen 5
K Erste Schritte Neues Fenster mit Textinhalt öffnen Java Basics - Anfänger-Themen 6
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A Popup-Fenster Java Basics - Anfänger-Themen 1
L Fenster auf Knopfdruck Java Basics - Anfänger-Themen 3
N Problem mit JOptionPane und Fenster-Fokus Java Basics - Anfänger-Themen 2
J ausgaben von der konsole in das fenster Java Basics - Anfänger-Themen 5
O Finally beim Fenster schliessen Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
P Eigenes Fenster erstellen Java Basics - Anfänger-Themen 5
M Input/Output Text auf Fenster zeichen Java Basics - Anfänger-Themen 2
T Zu viele Fenster - HILFE! Java Basics - Anfänger-Themen 5
J Extra Fenster (Frame) Java Basics - Anfänger-Themen 20
llabusch Fenster per Button verschieben Java Basics - Anfänger-Themen 5
llabusch Fenster um x Pixel verschieben Java Basics - Anfänger-Themen 4
P Window Builder Reiter im Fenster erstellen Java Basics - Anfänger-Themen 7
S Java Fenster Java Basics - Anfänger-Themen 2
D (zwei) Fenster mit unterschiedlicher Befüllung Java Basics - Anfänger-Themen 11
A JAVA Fenster in ein PDF Konvertieren Java Basics - Anfänger-Themen 1
A Erkennung eines Button im aktiven Fenster Java Basics - Anfänger-Themen 2
B Variable im Fenster anzeigen lassen? Java Basics - Anfänger-Themen 2
S Fenster ist zu groß Java Basics - Anfänger-Themen 8
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
X JFrame Fenster einzeln schließen Java Basics - Anfänger-Themen 2
E Fehlermeldung und Fenster wird nicht mehr angezeigt Java Basics - Anfänger-Themen 12
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
F Erste Schritte Aktuelles Fenster durch Event schließen Java Basics - Anfänger-Themen 3
N Java Programm im CMD Fenster öffnen, wie? Java Basics - Anfänger-Themen 17
S Erste Schritte Fenster wechsel im Applet Java Basics - Anfänger-Themen 7
tuttle64 Keine Umlaute im Dos Fenster Java Basics - Anfänger-Themen 12
J Button nimmt das komplette Fenster ein?! Java Basics - Anfänger-Themen 5
M Beim Klicken auf X neues Fenster Java Basics - Anfänger-Themen 4
Athena Schlichtes Fenster mit Windowskomponenten Java Basics - Anfänger-Themen 3
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
S Neues Fenster auf Knopfdruck Java Basics - Anfänger-Themen 12
J Button drücken neues Fenster?! Java Basics - Anfänger-Themen 5
A Login Fenster Java Basics - Anfänger-Themen 3
C Button - neues Fenster - Bestellung anzeigen Java Basics - Anfänger-Themen 10
Z GUI-Fenster leeren Java Basics - Anfänger-Themen 5
M Erste Schritte Probleme mit Fenster Schließen Java Basics - Anfänger-Themen 6
J Problem beim Fenster Java Basics - Anfänger-Themen 4
Z Login Fenster Java Basics - Anfänger-Themen 7
K Aus JFrame-Fenster SuM-Fenster öffnen geht nicht! Java Basics - Anfänger-Themen 8
T Client-Fenster bei Aufruf unvollständig Java Basics - Anfänger-Themen 12
O Größeres Fenster als angegeben?! Java Basics - Anfänger-Themen 2
J Eltern-Fenster ermitteln Java Basics - Anfänger-Themen 2
M Ausklappbares Fenster bei grafischem Taschenrechner Java Basics - Anfänger-Themen 2
V Fenster wird nicht mittig platziert Java Basics - Anfänger-Themen 3
P gui fenster nur einmal aufrufen Java Basics - Anfänger-Themen 5
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
J Werte ins neue Fenster übertragen Java Basics - Anfänger-Themen 6
S Fenster richtig schließen Java Basics - Anfänger-Themen 8
M Einfacher Fenster-Ablauf Java Basics - Anfänger-Themen 5
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
J Zweimal im gleichen Paint-Fenster malen Java Basics - Anfänger-Themen 8
SexyPenny90 Wie erstelle ich ein extra Fenster mit einer Meldung Java Basics - Anfänger-Themen 2
S nur neu geöffnetes Fenster schließen Java Basics - Anfänger-Themen 3
J Willkürlich geöffnetes Fenster/Dialog anspielen? Java Basics - Anfänger-Themen 3
M OOP GUI - Fenster vererben? Java Basics - Anfänger-Themen 9
T fenster schliesen und mouse events in einer nicht abstrakten klasse Java Basics - Anfänger-Themen 6
M Erste Schritte Fenster Und VB Funktionen Java Basics - Anfänger-Themen 8
G Scrollbares Fenster bei mehr als 5 Objekten Java Basics - Anfänger-Themen 4
L Fenster winzig klein durch GridBagLayout Java Basics - Anfänger-Themen 3
R Welcher Layout Manager-für so ein Fenster? Java Basics - Anfänger-Themen 5
H Java-Fenster ohne Inhalt Java Basics - Anfänger-Themen 2
T Windows Fenster Schließen Java Basics - Anfänger-Themen 4
E JFrame Fenster bewegen Java Basics - Anfänger-Themen 8
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
E javaw öffnet trotzdem ein DOS Fenster Java Basics - Anfänger-Themen 15
M Output Input im Cmd Fenster Java Basics - Anfänger-Themen 7
M Neues Fenster Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben