GUI-Bau für ein Auswertungs-Tool

deggit_biber

Aktives Mitglied
Hallo,
ich arbeite mich gerade in die GUI-Erstellung mit Java Swing ein und versuche ein Auswertungstool für ein Schulprojekt zu erstellen. Leider sind meine Java-Kenntnisse noch relativ beschränkt und ich komme hier und da nicht ganz weiter:

1. Wenn ihr euch meinen Code einmal anschaut und ihn ausführt, werdet ihr feststellen, dass zwischen den Fragen und den Checkboxen kein Zeilenumbruch ist. Ich hätte es gerne so: Frage, Zeilenumbruch, Checkboxen, doppelter Zeilenumbruch, neue Frage, Zeilenumbruch, Checkbox usw.

2. Damit am Ende die Auswertung vorgenommen werden kann, müsste ich am Ende alle Checkboxen abfragen. Wie frage ich eine Checkbox ab, so dass ich weiß, ob sie false oder true ist? Beispiel für Frage 1: Zwei Checkboxen sind ausgewählt, dann möchte ich gerne, dass eine Variable, z.B. int Auswertung auf 2 gesetzt wird. Bei drei ausgewählten Checkboxen auf 3 usw. Wenn bei Frage zwei nochmal ein Häkchen gesetzt wird, dann wird dies dazu addiert für die Auswertung am Ende (das bekomme ich schon irgendwie hin, sobald ich die Grundbefehle kenne).

3. Wie erreiche ich es, dass wenn der Auswahlbutton gedrückt wird, ein neues Fenster erscheint, und in diesem Fenster abhängig von den Variablen Auswertung eine variable Auswertung angezeigt wird? Als Beispiel: Ist die Variable größer 10, dann erscheint Text ..., ist sie größer 20, erscheint Text ... . Ich brauche auch hier lediglich die Grundbefehle zur Verknüpfung des Buttons mit der Erzeugung eines neuen Fensters und die Befehle zur Textausgabe. Den Rest werde ich mir schon irgendwie zusammenbauen ;)

Für eure Hilfe wäre ich euch sehr dankbar.
viele liebe Grüße,
Deggit


Java:
import java.awt.Color;
import java.io.File;
import java.io.IOException;

import java.awt.Color;
import javax.swing.*;
import javax.swing.plaf.metal.MetalIconFactory;

public class FrameBeispiel
{

    public static void main(String[] args)
    {
        JFrame meinJFrame = new JFrame();
        meinJFrame.setSize(600,300);
        meinJFrame.setTitle("Überschrift");
        JPanel panel = new JPanel();
      
        //panel.setBackground(Color.YELLOW);
      
        JLabel label_1 = new JLabel("1) Welches der Themenbereiche sprich dich am meisten an?", JLabel.LEFT);
        panel.add(label_1);
      
        //JCheckBoxen Frage 1
        JCheckBox cb1_1 = new JCheckBox("Wir lif/ve on Stage");
        JCheckBox cb1_2 = new JCheckBox("Wir in Natur und Technik");
        JCheckBox cb1_3 = new JCheckBox("Wir in Europa");
        JCheckBox cb1_4 = new JCheckBox("Wir mitten in der Gesellschaft");
    
        //JCheckBoxen dem Panel hinzufügen
        panel.add(cb1_1);
        panel.add(cb1_2);
        panel.add(cb1_3);
        panel.add(cb1_4);
      
      
        //JCheckBoxen Frage 2
        JLabel label_2 = new JLabel("2) blabla, usw...?", JLabel.LEFT);
        panel.add(label_2);
      
        JCheckBox cb2_1 = new JCheckBox("Wir...");
        JCheckBox cb2_2 = new JCheckBox("Wir...");
        JCheckBox cb2_3 = new JCheckBox("Wir...");
        JCheckBox cb2_4 = new JCheckBox("Wir...");
      
        panel.add(cb2_1);
        panel.add(cb2_2);
        panel.add(cb2_3);
        panel.add(cb2_4);
      
        // JToggleButton erstellen
        JToggleButton toggleButton = new JToggleButton("Auswertung", true);
        // JToggleButton Panel hinzufügen
        panel.add(toggleButton);
        // Panel dem Frame hinzufügen
        meinJFrame.add(panel);
      
        meinJFrame.setVisible(true);
}
}
 
Zuletzt bearbeitet von einem Moderator:

incluedu

Mitglied
Hallo Deggit

Bei dir fehlt es wirklich noch an den Grundlagen vielleicht solltest du erst mal einen Java Kurs machen, auf YouTube gibt es viele davon.

Wie auch immer ...

zu 1.
Damit du deine Elemente im Frame oder bei dir im Panel Platzieren kannst benötigst du einen Layoutmanager. Informationen was für Layoutmanager es gibt und wie diese verwendet werden findest du in der Java Dokumentation unter https://docs.oracle.com/javase/tutorial/uiswing/layout/index.html.
In deinem speziellen fall würde sich wohl ein GridBagLayout anbieten, dieses kannst du dir wie eine Tabelle vorstellen wo man die einzelnen Elemente in die einzelnen Zellen einfügt, aber auch mehrere Zellen zu einer Zeller verbinden kann. Infos dazu findest du ebenfalls in der Java Dokumentation unter https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html.

zu 2.
Die JCheckBox hat dafür eine Methode die sich isSelected nennt.
Java:
        int cbCount = 0;
        if (cb1_1.isSelected()) cbCount++;
        if (cb1_2.isSelected()) cbCount++;
        ...

zu 3.
Damit du deinem Auswahlbutton eine Aktion zuordnen kannst benötigst du einen ActionListener. Außerdem denke ich benötigst du keinen JToggleButton sondern einen JButton. Infos zu Action Listener findest du in der Java Dokumentation unter https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html.

Für die Dahrstellung von deinem Text könntest du eine Message Box verwenden, mehr infos dazu gibt es unter https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html
Der Code würde dann irgendwie so ausschauen
Java:
        // JButton erstellen
        JButton button = new JButton("Auswertung");
        button.addActionListener(e -> {
            int cbCount = 0;
            if (cb1_1.isSelected()) cbCount++;
            if (cb1_2.isSelected()) cbCount++;
            ...

            String text;
            text = "text 1";

            if (cbCount >= 10 && cbCount < 20) text = "zwischen 10 und 19";
            if (cbCount >= 20 && cbCount < 30) text = "zwischen 20 und 90";
            ...

            JOptionPane.showMessageDialog(meinJFrame, text);
        });

        // JButton Panel hinzufügen
        panel.add(button);

Aber wie schon oben erwähnt mach einen Java Kurs, wenn du es Englischen mächtig bist dann kann ich dir das Java Tutorial von Bucky Roberts empfehlen, danach kannst du deine Probleme alle lösen.
 
Zuletzt bearbeitet:

deggit_biber

Aktives Mitglied
Hallo incluedu,
danke für deine Antwort. Die Tipps haben wir schon einmal weitergeholfen und ich werde mich versuche heute weiter einzuarbeiten. Mein Englisch ist leider nicht ganz so gut aber ich hoffe ausreichend ;-)
Weißt du ob er das mit dem GridBagLayout auch in seinen Tutorials beschreibt und wenn ja in welchem?
Wenn es ok ist, würde ich meine Fortschritte gerne hier Posten.
viele liebe Grüße,
Deggit
 

incluedu

Mitglied
Hallo Deggit

Weißt du ob er das mit dem GridBagLayout auch in seinen Tutorials beschreibt und wenn ja in welchem?
Wenn es ok ist, würde ich meine Fortschritte gerne hier Posten.

Keine Ahnung ob er es irgendwo behandelt oder nicht, ist eigentlich auch egal ich finde nur du solltest ein wenig Java lernen bevor du solche Sachen machst und ich habe mit diesen Kursen viel gelernt.

Das GridBagLayout ist finde ich recht gut in dem Oracle tutorial beschrieben, es ist halt ein wenig aufwendig bzw viel code aber man muss bei dem Layout nix anderes machen als wie für 'jede Zelle der Tabelle' die Eigenschaften einzustellen. Am einfachsten und übersichtlichsten (nicht unbedingt am effizientesten) ist das wenn man sich überlegt was man alles braucht und dann immer alle Eigenschaften anpasst so wie man sie haben möchte.

Hier ein kleines Beispiel wie man sowas machen kann

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

public class GridBagLayoutDemo extends JFrame {

    public GridBagLayoutDemo() throws HeadlessException {

        setTitle("GridBagDemo");
        setSize(600, 400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        GridBagConstraints c = new GridBagConstraints();
        int column = 0;
        int row = 0;

        setLayout(new GridBagLayout());

        // label 1
        column = 0;
        c.gridx = column;
        c.gridy = row;
        c.gridwidth = 3;
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 1.0;
        c.weighty = 0.0;
        c.insets = new Insets(5,5,5,5);
        add(new JLabel("Das ist label 1, es geht über drei Spalten"), c);

        // checkbox 1
        column = 0;
        row++;
        c.gridx = column;
        c.gridy = row;
        c.gridwidth = 1;
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 0.0;
        c.weighty = 1.0;
        c.insets = new Insets(5,5,5,5);
        JCheckBox checkBox1 = new JCheckBox("Checkbox 1");
        add(checkBox1, c);

        // checkbox 2
        column++;
        c.gridx = column;
        c.gridy = row;
        c.gridwidth = 1;
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 0.0;
        c.weighty = 1.0;
        c.insets = new Insets(5,5,5,5);
        JCheckBox checkBox2 = new JCheckBox("Checkbox 2");
        add(checkBox2, c);

        // checkbox 3
        column++;
        c.gridx = column;
        c.gridy = row;
        c.gridwidth = 1;
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 1.0;
        c.weighty = 1.0;
        c.insets = new Insets(5,5,5,5);
        JCheckBox checkBox3 = new JCheckBox("Checkbox 3");
        add(checkBox3, c);

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new GridBagLayoutDemo().setVisible(true));
    }
}
 

deggit_biber

Aktives Mitglied
Danke dir für deinen neuen Post!
Du hast schon recht mit dem Java lernen. Die Grundlagen. Klasse, Methode, Variablen, Anweisungen Kontrollstrukturen usw. kann ich aber bis jetzt waren das immer nur Spielereien, also mal hier und da eine Methode schreiben, um die Grundlagen auszuprobieren. Das mit dem Toll, ist da schon etwas ganz anderes.

Danke für deinen Code ich fuchse mich da mal ein ;-)

lg
Deg
 

deggit_biber

Aktives Mitglied
Hallo,
so ich habe mich ein wenig in die Materie eingearbeitet, aber wie sollte es auch anders sein, hier und da muss wohl noch etwas nach justiert werden ;-)

Am besten ich Frage Schritt für Schritt...
In meiner Testversion habe ich vier Fragen mit unterschiedlichen vielen CheckBoxen. Damit es nicht unübersichtlich wird, würde ich zum Anfang nur Frage 1 mit 4 Checkboxen, die untereinander angezeigt werden sollen umsetzen.
Also:
Frage 1: blablabal
CheckBox1 ....................
CheckBox2 ....................
CheckBox3 ....................
CheckBox4 ....................

Leider klappt das noch nicht so ganz.... Die CheckBoxen zeigt er mir richtig an, aber die Frage 1 wird gar nicht angezeigt.

Hier einmal mein Code
Code:
package tool.swing;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class LayoutManagerTestKlasse extends JFrame {
    private static final long serialVersionUID = -4488761188188763802L;
  
  
    // Globale Variablen
    private Toolkit t;
    private int x = 0, y = 0, width = 800, height = 600;    // Variablen zur Positionierung des Fensters
  
// ------------- Komponenten für die GUI --------------
  
    private JLabel        Frage1;
    private JLabel        Frage2;
    private JLabel        Frage3;
    private JLabel        Frage4;
  
    private JCheckBox    cb_Frage1_1;
    private JCheckBox    cb_Frage1_2;
    private JCheckBox    cb_Frage1_3;
    private JCheckBox    cb_Frage1_4;
  
    private JCheckBox    cb_Frage2_1;
    private JCheckBox    cb_Frage2_2;
    private JCheckBox    cb_Frage2_3;
    private JCheckBox    cb_Frage2_4;
  
    private JCheckBox    cb_Frage3_1;
    private JCheckBox    cb_Frage3_2;
    private JCheckBox    cb_Frage3_3;
    private JCheckBox    cb_Frage3_4;
  
    private JCheckBox    cb_Frage4_1;
    private JCheckBox    cb_Frage4_2;
    private JCheckBox    cb_Frage4_3;
    private JCheckBox    cb_Frage4_4;
    private JCheckBox    cb_Frage4_5;
    private JCheckBox    cb_Frage4_6;
    private JCheckBox    cb_Frage4_7;
    private JCheckBox    cb_Frage4_8;
    private JCheckBox    cb_Frage4_9;
    private JCheckBox    cb_Frage4_10;
    private JCheckBox    cb_Frage4_11;
    private JCheckBox    cb_Frage4_12;
    private JCheckBox    cb_Frage4_13;
    private JCheckBox    cb_Frage4_14;
  
    private JButton        auswertung;
    private JButton        reset;
  
// ------------------ Konstruktor ---------------------
  
    public LayoutManagerTestKlasse(){
      
        // Fenster zentral positionieren
        t = Toolkit.getDefaultToolkit();                // Fenstergröße holen
        Dimension d = t.getScreenSize();      
        x = (int) ((d.getWidth() - width) / 2);            // x und y Position in Abhängigkeit des Bildschirms berechnen
        y = (int) ((d.getHeight() - height) / 2);      
      
        setTitle("Überschrift");
        setBounds(x, y, width, height);                    // Startposition/Größe des Fensters
      

        // Schließt das Fenster und alle Anwendungen, also obacht beim setzen der Option
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
      
        // Initialisierung vers. Methoden (Komponenten, Listerns, usw.)
        this.initComponents();
        this.initListeners();
      
        setVisible(true);              
    }
  
  
  
// ------------ Methode zur Initialisierung der Komponenten für die GUI --------------------  
  
    private void initComponents() {
  
// ------------ Objekte erstellen -----------------
      
        // Layout für das Jframe
        this.getContentPane().setLayout(new GridBagLayout());
      
        // Labels (für die Fragen)
        this.Frage1            = new JLabel("Welcher der Themenbereiche spricht Dich am meisten an?");
//        this.Frage2            = new JLabel("In welchen der folgenden Fächer hattest du die beste Note? (Hast du in mehreren Fächern jeweils deine Beste Note, dann wähle das Fach welches du lieber magst.)");
//        this.Frage3            = new JLabel("In welchen der folgenden Fächer hattest du die beste Note? (Hast du in mehreren Fächern jeweils deine Beste Note, dann wähle das Fach welches du lieber magst.)");
//        this.Frage4            = new JLabel("Für welche Fächer interessierst du dich? (4 Nennungen möglich)");
      
        // CheckBoxen
        this.cb_Frage1_1    = new JCheckBox("Wir lif/ve on Stage.................................................");
        this.cb_Frage1_2    = new JCheckBox("Wir in Natur und Technik.................................................");
        this.cb_Frage1_3    = new JCheckBox("Wir in Europa.................................................");
        this.cb_Frage1_4    = new JCheckBox("Wir mitten in der Gesellschaft.................................................");
      
//        this.cb_Frage2_1    = new JCheckBox("Gesellschaftslehre");
//        this.cb_Frage2_2    = new JCheckBox("Engisch");
//        this.cb_Frage2_3    = new JCheckBox("Chemie");
//        this.cb_Frage2_4    = new JCheckBox("Kunst");
//      
//        this.cb_Frage3_1    = new JCheckBox("Religion");
//        this.cb_Frage3_2    = new JCheckBox("Deutsch");
//        this.cb_Frage3_3    = new JCheckBox("Arbeitslehre");
//        this.cb_Frage3_4    = new JCheckBox("Musik");
//      
//        this.cb_Frage4_1    = new JCheckBox("Deutsch");
//        this.cb_Frage4_2    = new JCheckBox("Engisch");
//        this.cb_Frage4_3    = new JCheckBox("Mathematik");
//        this.cb_Frage4_4    = new JCheckBox("Musik");
//        this.cb_Frage4_5    = new JCheckBox("Kunst");
//        this.cb_Frage4_6    = new JCheckBox("Religion");
//        this.cb_Frage4_7    = new JCheckBox("Arbeitslehre: Hauswirtschaft");
//        this.cb_Frage4_8    = new JCheckBox("Arbeitslehre: Technik");
//        this.cb_Frage4_9    = new JCheckBox("Sport");
//        this.cb_Frage4_10    = new JCheckBox("Französisch/Latein");
//        this.cb_Frage4_11    = new JCheckBox("Chemie");
//        this.cb_Frage4_12    = new JCheckBox("Naturwissenschaft");
//        this.cb_Frage4_13    = new JCheckBox("Darstellen und Gestalten");
//        this.cb_Frage4_14    = new JCheckBox("Gesellschaftslehre");
  
// ------------ Objekte im Layout plazieren ------------------

        //Grid-Variable zur Festlegung von: Positionierung, Eigenschaft aller Komponenten
        GridBagConstraints c = new GridBagConstraints();
      
        // Frage 1
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.ipady = 0;
        c.gridx = 0;                                         // Positionierung
        c.gridy = 0;
        c.gridwidth = 4;                                    //4 Zeilen verbinden
        //c.insets = new Insets(5, 5, 5, 5);                    // Abstand zwischen den Komponenten
      
        //Label mit spez. Eigenschaften hinzufügen, welche über c definiert werden
        this.getContentPane().add(this.Frage1, c);
      
        // CheckBox 1: Frage 1
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 1;                                       
        c.gridy = 0;
        //c.insets = new Insets(10, 10, 10, 0);
        this.getContentPane().add(this.cb_Frage1_1, c);
      
        // CheckBox 2: Frage 1
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 1;                                       
        c.gridy = 1;
        //c.insets = new Insets(10, 10, 10, 0);
        this.getContentPane().add(this.cb_Frage1_2, c);
      
        // CheckBox 3: Frage 1
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 1;                                       
        c.gridy = 2;
        //c.insets = new Insets(10, 10, 10, 0);
        this.getContentPane().add(this.cb_Frage1_3, c);
      
        // CheckBox 4: Frage 1
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 1;                                       
        c.gridy = 3;
        //c.insets = new Insets(10, 10, 10, 0);
        this.getContentPane().add(this.cb_Frage1_4, c);
    }


  
// ------------- Methode für die Listeners (Reaktion auf Veränderungen in der GUI) -----------

    private void initListeners() {
      
      
      
    }
  
    public static void main(String[] args)
    {
        new LayoutManagerTestKlasse();                                //Ruft den Konstruktor auf, der das Fenster erstellt
    }

}

Es wäre echt toll, wenn mir da jemand weiterhelfen könnte.
viele Grüße,
Deg
 

deggit_biber

Aktives Mitglied
Hallo,
ich bin jetzt noch ein Stück weiter aber es klappt leider noch nicht so ganz.
Ich Poste nur einmal die Codestellen, wo ich meine, dass das Problem liegt.
Ich kann aber auch gerne den ganzen Code Posten.

Und zwar denke ich, dass Problem liegt beim
c.gridwidth = 2;
soweit ich weiß, verbinde ich doch mit diesen Befehl zwei Spalten.
Das scheint auch zu klappen, aber warum legt er mir nach der Frage 1 beide CheckBoxen übereinander? (Siehe Bild)
Die sollen eigentlich nebeneinander in einer Zeile angezeigt werden.
Hinter der CheckBox1 steht "Wir lif/ve on Stage" und hinter der zweiten steht "Wir in Natur und Technik. Das Technik kann man auf den Bild noch sehen.

Wenn mir da jemand weiterhelfen könnte, wäre das mehr als nett!!!

viele liebe Grüße,
Deg

Code:
// ------------ Objekte im Layout plazieren ------------------

        // Grid-Variable zur Festlegung von: Positionierung, Eigenschaft aller Komponenten
        GridBagConstraints c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 0;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
       
        // Überschrift
        c.gridwidth = 2;
        c.ipady = 10;
        this.unterContainer.add(this.ueberschrift, c);
       

        // Einleitung
        c.gridy ++;
        c.gridwidth = 2;
        c.ipady = 20;
        this.unterContainer.add(this.einleitung, c);
       
       
        // Frage 1
        c.gridy ++;
        c.gridwidth = 2;
        this.unterContainer.add(this.frage1, c);
                       
        // CheckBoxen Frage 1
        c.gridy ++;
        this.unterContainer.add(this.cb_Frage1_1, c);
        c.gridx ++;
        this.unterContainer.add(this.cb_Frage1_2, c);
       
       
        // hinzufügen der Container zum MasterContainer
        this.masterContainer.add(this.unterContainer);
       
       
        // MasterContainer dem JFram hinzufüge
        this.getContentPane().add(this.masterContainer);
       
    }

   
// ------------- Methode für die Listeners (Reaktion auf Veränderungen in der GUI) -----------

    private void initListeners() {
       
       
       
    }
   
    public static void main(String[] args)
    {
        new GridBagLayoutEinLayer();                                //Ruft den Konstruktor auf, der das Fenster erstellt
    }

}
 

Anhänge

  • uebereinader.JPG
    uebereinader.JPG
    31,4 KB · Aufrufe: 33
  • upload_2016-7-26_17-57-57.png
    upload_2016-7-26_17-57-57.png
    20,3 KB · Aufrufe: 31

incluedu

Mitglied
Hallo Deg

Du solltest es beim GridBag Layout so machen wie ich es dir empfohlen habe das du immer alle Parameter ausfüllst. Ist zwar ein wenig codeintensiver und sicherlich auch nicht ganz optimal aber damit kann so etwas eigentlich nicht passieren.

Das Problem bei dir ist das du ja immer dasselbe Constraint Object verwendest (was auch ok ist). Durch hinzufügen eines Widgets zum Container (JFrame, JPanel) wird dein Object nicht zurückgesetzt. Das soll heißen wenn du bei deiner Überschrift die Zeile 'c.gridwidth = 2' einfügst dann steht bis du das änderst da immer eine 2 drinnen. Damit genau dein Code funktioniert musst du bei der Checkbox Frage 1 ein 'c.gridwidth = 1' einfügen.
Aber wie schon geschrieben ich würde dir empfehlen das du immer alle Parameter so setzt wie sie für das Jeweilige Widget gehören.
 

deggit_biber

Aktives Mitglied
Morgen,
stimmt du hast vollkommen recht, ich habe es noch nicht wirklich verinnerlicht, dass die Werte ja die ganze Zeit gelten und wenn man einen neuen Wert haben will, muss man den alten überschreiben ;-)
Danke dir auch für den Tipp mir den Parameter. Werde ich jetzt so machen!

Noch eine Kleinigkeit. Jetzt sieht das ganze bei mir so aus. (siehe Bild) ist auch in etwa das was ich haben will. Aber ich hätte gerne, dass die beiden CheckBoxen "Wir lif..." und "Wir in der N..." noch etwas näher zusammenstehen.

Ich habe leider gerade keine wirklich Idee wie das gehen sollte :(
Wenn ich die Textlänge bei Frage1 verändere, dann verändert sich auch der Abstand mit zwischen den Boxen soviel habe ich schon einmal rausgefunden ;-)

vielen lieben dank für deinen Rat und die Hilfe
Deg
 

incluedu

Mitglied
Hallo Deg
Ich sehe zwar weder eine Bild noch einen Code, könnte mir aber denken das sich dein Problem mit dem Parameter 'c.weighty' lösen lässt. Lies dir mal die Hilfe zu den Parametern durch denke dann müsste es klappen.
 

deggit_biber

Aktives Mitglied
Ach sorry, komme gerade erst wieder rein und habe heute morgen ganz vergessen, das Bild anzuhängen. Danke dir aber, dass du trotzdem geschrieben hast ;-)
Hier einmal das Bild. Ich schaue mir das ganze aber mit dem Parameter weighty erst einmal an. Dann schreibe ich noch einmal.
vielen lieben Dank!
 

Anhänge

  • foto2.JPG
    foto2.JPG
    32,2 KB · Aufrufe: 28

deggit_biber

Aktives Mitglied
Ich glaub ich habs jetzt ;-)

War eine schwere Geburt aber jetzt klappt es ;-) Danke dir!

Noch eine Kleinigkeit, die jetzt nicht so wichtig ist, die mich aber Interessiert.
ipady gibt die innen Größen der Elemente an, sprich erhöhe ich diesen Wert, dann wird der Abstand zum vorderen und hinteren Element um diesen Wert vergrößert.
Im Moment gestalte ich so die Abstände zwischen den Fragen und den Antworten. Das dumme ist nur, dass sich der Abstand immer nach oben und unten gleicht verändert

Ich glaube unregelmäßig könnte es mit c.weighty gehen, oder? Aber wenn ich es richtig versteh, dann verteilt weight die Elemente auch gleichmäßig (Damit die Komponenten nicht im Zentrum des Panels gebündelt bleiben, sondern sich über die zur Verfügung stehende Fläche verteilen können, so steht es zumindest in einer Anleitung)

Ich stelle mir so etwas vor (Die Zahlen sind die Abstände vom oberen zum nächsten Element)
Überschrift
10
Einleitung
24
Frage 1
2
Antwort 1
12
Frage 2
2
Antwort 2
12
usw...

Hier einmal mein Code bis jetzt und ein Bild diesmal vergesse ich es nicht ;-)
Java:
// ------------ Objekte im Layout plazieren ------------------


        // Grid-Variable zur Festlegung von: Positionierung, Eigenschaft aller Komponenten
        GridBagConstraints c = new GridBagConstraints();
        int column = 0;                                                // Spalte
        int row = 0;                                                // Zeile       
       
        // Überschrift
        column = 0;
        row = 0;
        c.gridx = column;                                            // position
        c.gridy = row;
        c.gridwidth = 2;                                            // Gib die Anzahl der Zellen an, die das Element belegen soll
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 0.0;
        c.weighty = 0.0;
        //c.ipadx = 0;
        c.ipady = 0;
        this.unterContainer.add(this.ueberschrift, c);
       

        // Einleitung
        column = column;
        row ++;
        c.gridx = column;                                            
        c.gridy = row;
        c.gridwidth = 2;                                           
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 0.0;
        c.weighty = 0.0;
        //c.ipadx = 0;
        c.ipady = 20;
        this.unterContainer.add(this.einleitung, c);
       
       
        // Frage 1
        column = column;
        row ++;
        c.gridx = column;                                            
        c.gridy = row;
        c.gridwidth = 2;                                           
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 0.0;
        c.weighty = 0.0;
        //c.ipadx = 0;
        c.ipady = 8;
        this.unterContainer.add(this.frage1, c);
                       
        // CheckBox 1 Frage 1
        column = column;
        row ++;
        c.gridx = column;                                            
        c.gridy = row;
        c.gridwidth = 1;                                           
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 1.0;
        c.weighty = 0.0;
        //c.ipadx = 0;
        c.ipady = 0;
        this.unterContainer.add(this.cb_Frage1_1, c);
       
        // CheckBox 2 Frage 1
        column ++;
        row = row;
        c.gridx = column;                                            
        c.gridy = row;
        c.gridwidth = 1;                                           
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 1.0;
        c.weighty = 0.0;
        //c.ipadx = 0;
        c.ipady = 0;
        this.unterContainer.add(this.cb_Frage1_2, c);
       
        // CheckBox 3 Frage 1
        column --;
        row ++;
        c.gridx = column;                                            
        c.gridy = row;
        c.gridwidth = 1;                                           
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 1.0;
        c.weighty = 0.0;
        //c.ipadx = 0;
        c.ipady = 0;
        this.unterContainer.add(this.cb_Frage1_3, c);
       
        // CheckBox 3 Frage 1
        column ++;
        row = row;
        c.gridx = column;                                            
        c.gridy = row;
        c.gridwidth = 1;                                           
        c.gridheight = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.FIRST_LINE_START;
        c.weightx = 1.0;
        c.weighty = 0.0;
        //c.ipadx = 0;
        c.ipady = 0;
        this.unterContainer.add(this.cb_Frage1_4, c);
       
       
        // hinzufügen der Container zum MasterContainer
        this.masterContainer.add(this.unterContainer);
       
       
        // MasterContainer dem JFram hinzufüge
        this.getContentPane().add(this.masterContainer);
       
    }
 

Anhänge

  • foto3.JPG
    foto3.JPG
    33,6 KB · Aufrufe: 30
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin setzen background color für selected Row im Tableview AWT, Swing, JavaFX & SWT 21
Juelin Für Java-Spezialisten AWT, Swing, JavaFX & SWT 4
H JTabel - RowFilter Daten für Berechnung filtern AWT, Swing, JavaFX & SWT 6
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
komplettlost Vollbildmodus für MacOs Nutzer geht nicht AWT, Swing, JavaFX & SWT 13
D JavaFX Schadensberechnung für Kartenspiel AWT, Swing, JavaFX & SWT 1
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
L actionListener für Button AWT, Swing, JavaFX & SWT 97
izoards Textfeld für Zeit AWT, Swing, JavaFX & SWT 4
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
T Getter und Setter für eine Stage AWT, Swing, JavaFX & SWT 6
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
Z Switch Case für Buttons AWT, Swing, JavaFX & SWT 8
M Hough-Transformation für Kreise und andere Formen AWT, Swing, JavaFX & SWT 3
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
MiMa Package Struktur für GUI Programmierung AWT, Swing, JavaFX & SWT 26
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
B eclipse für JavaFx setuppen AWT, Swing, JavaFX & SWT 4
K Swing Struktur für TreeTable rekursiv aufbauen AWT, Swing, JavaFX & SWT 17
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
H Ein Patten für das Gluon Mobile Framework AWT, Swing, JavaFX & SWT 7
J Gibt es einen Grund für 16x16 anstatt z.B. 15x15 Tiles ? AWT, Swing, JavaFX & SWT 10
F JFormattedTextField für kg und Währung AWT, Swing, JavaFX & SWT 6
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
Soloeco JavaFX Dreifachklick für MenuButton erforderlich AWT, Swing, JavaFX & SWT 2
L JavaFX Lösungsvorschläge für dieses coole Control AWT, Swing, JavaFX & SWT 8
looparda Suche Lib für Visualisierung von Graphen AWT, Swing, JavaFX & SWT 12
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
S Swing Finde Grund für NullPointerExeption nicht. AWT, Swing, JavaFX & SWT 2
W JavaFX (j)Unittests für GUI AWT, Swing, JavaFX & SWT 0
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2
SchmidiMC Swing Vorschläge für ein Design AWT, Swing, JavaFX & SWT 5
Z JavaFX Pane für wechselnde Sub-Panes mit Auto-Resize AWT, Swing, JavaFX & SWT 2
S 2D-Grafik affine Transformation für Text-Shape AWT, Swing, JavaFX & SWT 0
G Swing Variable Elemente für GroupLayout AWT, Swing, JavaFX & SWT 18
kodela Accalerator für einige Menüoptionen funktioniert nicht mehr AWT, Swing, JavaFX & SWT 3
P Swing Empfehlungen für einfaches Computerspiel AWT, Swing, JavaFX & SWT 4
L DragDropped für jede Node AWT, Swing, JavaFX & SWT 0
temi JavaFX Lösungsansatz für Umsetzung gesucht AWT, Swing, JavaFX & SWT 4
J Swing JavaProgramm für Verschlüssen für eine Datei AWT, Swing, JavaFX & SWT 19
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
MiMa Programmeinstellungen für Anwendung?? AWT, Swing, JavaFX & SWT 54
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
L JavaFX Renderer für JavaFX AWT, Swing, JavaFX & SWT 2
MiMa GUI Controller für Border Pane als MVC Modell AWT, Swing, JavaFX & SWT 1
L Font für Dashboard AWT, Swing, JavaFX & SWT 3
F Swing JColorChooser für die JToggleButtons AWT, Swing, JavaFX & SWT 5
S JavaFX Optimierung für verschiedene Auflösungen AWT, Swing, JavaFX & SWT 12
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
T Swing Drag and Drop für JComponents AWT, Swing, JavaFX & SWT 1
Kloso Swing Pseudocode für Strafurzeichnung AWT, Swing, JavaFX & SWT 4
F Konstruktor für "Vier Gewinnt" AWT, Swing, JavaFX & SWT 10
L JavaFX PdfViewer für JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
R Swing Welche LayoutManager sind die richtigen für mich? AWT, Swing, JavaFX & SWT 11
L Event Handling Gui für Taschenrechner AWT, Swing, JavaFX & SWT 27
C Slider für Zeitauswahl AWT, Swing, JavaFX & SWT 3
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
OnDemand Gui Themes für FX AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P JavaFX Kalender mit Kacheln für Ereignisse AWT, Swing, JavaFX & SWT 4
S ActionListener für alle Buttons AWT, Swing, JavaFX & SWT 26
J Swing Neuen Command für "show"? AWT, Swing, JavaFX & SWT 2
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
H Swing JFileChooser für nicht existierendes Unterverzeichnis AWT, Swing, JavaFX & SWT 3
R Java FX - Fxml - relative Größenangaben für Breite und Höhe einer TextArea AWT, Swing, JavaFX & SWT 8
L Swing CellRenderer für einzelne Zellen? AWT, Swing, JavaFX & SWT 5
RalleYTN Swing Menü für Texteditor (Rechtsklick) AWT, Swing, JavaFX & SWT 4
H Applet Flappy Bird für Noobs AWT, Swing, JavaFX & SWT 4
X JavaFX Tooltips für XYChart-Knoten werden nicht angezeigt! AWT, Swing, JavaFX & SWT 3
Thallius Swing Aufgabe für einen der gerne Tüftelt. AWT, Swing, JavaFX & SWT 4
A hilfe für flowlayout AWT, Swing, JavaFX & SWT 6
B EventHandler für durch Tastenkombination erzeugte Zeichen AWT, Swing, JavaFX & SWT 3
T Hintergrund für GUI AWT, Swing, JavaFX & SWT 1
L JavaFX TableView mit Attributs der Modellreferenzerierung für die Spalte AWT, Swing, JavaFX & SWT 3
C JavaFX Character Comparator für TableColumn AWT, Swing, JavaFX & SWT 0
KrokoDiehl JavaFX Gleiche Controller-Instanz für inludiertes FXML AWT, Swing, JavaFX & SWT 1
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
S Pfad für Speichervorgang auswählen AWT, Swing, JavaFX & SWT 11
M If für viele TextFields AWT, Swing, JavaFX & SWT 7
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
R JMenuItems für Touchscreen auseinanderziehen AWT, Swing, JavaFX & SWT 3
L LookAndFeel Eigenes Design für die Applikation AWT, Swing, JavaFX & SWT 4
G Grafikformat für AWT-Applet? AWT, Swing, JavaFX & SWT 0
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
Z JavaFX TableView cellValueFactory für Arrays AWT, Swing, JavaFX & SWT 2
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben