Pieter-Jan Casteels
Pieter-Jan Casteels

Reputation: 103

Java swing java.lang.IllegalStateException

First of all i am only programming 6-7 months in a school envirement so this might be a stupid question.

In class we just recently learned about AWT and SWING. So while i was reading up on it i decided to test some things out and incorporate some in my program for the exams in a copple of months.

So what i did was make a GUI where if you press a button you got to a class called VoegToe and add a parameter (Trein trein).

Now i tried to add a GroupLayout but after recieving a error like this i realy have no clue where to start or what i have done wrong.

The error :

java.lang.IllegalStateException: javax.swing.JButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@7a3cdf,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Annuleer,defaultCapable=true] is not attached to a horizontal group

The code

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.GroupLayout.*;

/**
 * Voeg loco of wagen toe aan het systeem
 *
 * @author Pieter-Jan Casteels
 * @version 2017-04-27
 */
public class VoegToe
{
    private Trein trein;
    private JFrame frame;

    /**
     * Constructor voor objects van class VoegToe
     */
    public VoegToe(Trein newTrein)
    {
        setTrein(newTrein);
        //makePopUp();
    }

    /**
     * Setter voor de Trein classe
     * 
     * @param Trein de huidige Trein
     */
    private void setTrein(Trein newTrein)
    {
        trein = newTrein;
        //makePopUp();
    }

    public void makePopUp()
    {
        // DropDown voor het selecteren van wagen of Loco
        String[] comboFill = {"Wagen", "Loco"};
        JComboBox locoWagen = new JComboBox(comboFill);

        JTextField wagenNummer = new JTextField();
        JTextField lengte = new JTextField();
        JTextField massa = new JTextField();
        JTextField lading = new JTextField();
        JTextField remming = new JTextField();
        JTextField handRem = new JTextField();

        JButton voegToeButton = new JButton("Voeg Toe");
        JButton resetButton = new JButton("Reset");
        JButton annButton = new JButton("Annuleer");

        frame = new JFrame("Voeg Wagen of Loco toe");
        Container frameContent = frame.getContentPane();
        GroupLayout layout = new GroupLayout(frameContent);
        frameContent.setLayout(layout);

        layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup()
                .addComponent(locoWagen)
                .addComponent(wagenNummer)
                .addComponent(lengte))
            .addGroup(layout.createParallelGroup()
                .addComponent(massa)
                .addComponent(lading))
            .addGroup(layout.createParallelGroup()
                .addComponent(remming)
                .addComponent(handRem))
            .addGroup(layout.createParallelGroup()
                .addComponent(voegToeButton)
                .addComponent(resetButton)
                .addComponent(annButton))
        );

        frame.pack();
        frame.setVisible(true);
    }

    /**
     * Voeg een wagen toe zonder schroefrem
     * 
     * @param long de nummer van de wagen
     * @param intiger lengte van de wagen in CM
     * @param intiger de massa van de wagen in KG
     * @param intiger de massa van de lading in KG
     * @param intiger de remming van de wagen
     */
    public void addWagen(long newWagenNummer, int newLengte, int newMassa, int newLading, int newRemming)
    {
        Wagen wagen = new Wagen(newWagenNummer, newLengte, newMassa, newLading, newRemming);
        trein.voegWagenToe(wagen);
    }

    /**
     * Voeg een wagen toe met schroefrem
     * 
     * @param long de nummer van de wagen
     * @param intiger lengte van de wagen in CM
     * @param intiger de massa van de wagen in KG
     * @param intiger de massa van de lading in KG
     * @param intiger de remming van de wagen
     * @param intiger remming van schroefrem
     */
    public void addWagen(long newWagenNummer, int newLengte, int newMassa, int newLading, int newRemming, int newRemmingSchroefrem)
    {
        Wagen wagen = new Wagen(newWagenNummer, newLengte, newMassa, newLading, newRemming, newRemmingSchroefrem);
        trein.voegWagenToe(wagen);
    }

    /**
     * Voeg een Locomotief toe
     * 
     * @param long de nummer van de loco
     * @param intiger lengte van de loco in CM
     * @param intiger de massa van de loco in KG
     * @param intiger de remming van de loco
     */
    public void addLoco(long newLocoNummer, int newLengte, int newMassa, int newRemming, boolean newAlsVoertuig)
    {
        Loco loco = new Loco(newLocoNummer, newLengte, newMassa, newRemming, newAlsVoertuig);
        trein.voegLocoToe(loco);
    }
}

I hope there is someone who sees what i have done wrong and be able to explain in newby language :)

Upvotes: 0

Views: 258

Answers (1)

Pieter-Jan Casteels
Pieter-Jan Casteels

Reputation: 103

My mestake was having only the verticalgroup. A grouplayout should be seen as a table. You have the horizontal and vertical lines where you should place components.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.GroupLayout.*;

/**
 * Voeg loco of wagen toe aan het systeem
 *
 * @author Pieter-Jan Casteels
 * @version 2017-04-28
 */
public class VoegToe
{
    private Trein trein;
    private JFrame frame;

    private JTextField wagenNummer;
    private JTextField lengte;
    private JTextField massa;
    private JTextField lading;
    private JTextField remming;
    private JTextField handRem;
    private String currentLocoWagen;
    private JCheckBox voertuig;

    /**
     * Constructor voor objects van class VoegToe
     */
    public VoegToe(Trein newTrein)
    {
        setTrein(newTrein);
        setFields();
        makePopUp();
    }

    private void setFields()
    {
        wagenNummer = new JTextField(16);
        lengte = new JTextField(16);
        massa = new JTextField(16);
        lading = new JTextField(16);
        remming = new JTextField(16);
        handRem = new JTextField(16);
        voertuig = new JCheckBox("Is Voertuig");
        currentLocoWagen = "Wagen";
    }

    /**
     * Setter voor de Trein classe
     * 
     * @param Trein de huidige Trein
     */
    private void setTrein(Trein newTrein)
    {
        trein = newTrein;
    }

    public void makePopUp()
    {
        frame = new JFrame("Voeg Wagen of Loco toe");
        Container frameContent = frame.getContentPane();
        GroupLayout layout = new GroupLayout(frameContent);
        frameContent.setLayout(layout);

        // DropDown voor het selecteren van wagen of Loco
        JLabel leeg = new JLabel("");
        JLabel lWagenNummer= new JLabel("Wagen Nummer");
        JLabel lLengte = new JLabel("Lengte CM");
        JLabel lRemming = new JLabel("Remming TON");
        JLabel lMassa = new JLabel("Massa KG");
        JLabel lLading = new JLabel("Lading KG");
        JLabel lHandRem = new JLabel("Hand Rem TON");

        String[] comboFill = {"Wagen", "Loco"};
        JComboBox locoWagen = new JComboBox(comboFill);
        locoWagen.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    currentLocoWagen = String.valueOf(locoWagen.getSelectedItem());
                }
            });

        JButton voegToeButton = new JButton("Voeg Toe");
        voegToeButton.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    if(currentLocoWagen.equals("Wagen"))
                    {
                        voegWagenToe();
                    }

                    if(currentLocoWagen.equals("Loco"))
                    {
                        voegLocoToe();
                    }
                }
            });

        JButton resetButton = new JButton("Reset");
        resetButton.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    wagenNummer.setText("");
                    lengte.setText("");
                    massa.setText("");
                    lading.setText("");
                    remming.setText("");
                    handRem.setText("");
                }
            });

        JButton annButton = new JButton("Annuleer");
        annButton.addActionListener(new ActionListener() 
            {
                public void actionPerformed(ActionEvent e)
                {
                    frame.dispose();
                }
            });

        layout.setHorizontalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup()
                .addComponent(leeg)
                .addComponent(lWagenNummer)
                .addComponent(wagenNummer)
                .addComponent(lMassa)
                .addComponent(massa)
                .addComponent(resetButton))
            .addGroup(layout.createParallelGroup()
                .addComponent(locoWagen)
                .addComponent(lLengte)
                .addComponent(lengte)
                .addComponent(lLading)
                .addComponent(lading)
                .addComponent(annButton))
            .addGroup(layout.createParallelGroup()
                .addComponent(voertuig)
                .addComponent(lRemming)
                .addComponent(remming)
                .addComponent(lHandRem)
                .addComponent(handRem)
                .addComponent(voegToeButton)) );

        layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup()
                .addComponent(leeg)
                .addComponent(locoWagen)
                .addComponent(voertuig))
            .addGroup(layout.createParallelGroup()
                .addComponent(lWagenNummer)
                .addComponent(lLengte)
                .addComponent(lRemming))
            .addGroup(layout.createParallelGroup()
                .addComponent(wagenNummer)
                .addComponent(lengte)
                .addComponent(remming))
            .addGroup(layout.createParallelGroup()
                .addComponent(lMassa)
                .addComponent(lLading)
                .addComponent(lHandRem))
            .addGroup(layout.createParallelGroup()
                .addComponent(massa)
                .addComponent(lading)
                .addComponent(handRem))
            .addGroup(layout.createParallelGroup()
                .addComponent(resetButton)
                .addComponent(annButton)
                .addComponent(voegToeButton)) );

        frame.pack();
        frame.setVisible(true);
    }

    /**
     * Checks op alle data ingeput voor een loco toe te voegen
     */
    private void voegLocoToe()
    {
        long newWagenNummer = Long.parseLong(wagenNummer.getText());
        int newLengte = Integer.parseInt(lengte.getText());
        int newMassa = Integer.parseInt(massa.getText());
        int newRemming = Integer.parseInt(remming.getText());

        // Standaard is de locomotief geen voertuig
        boolean isVoertuig = false;
        if(voertuig.isSelected())
        {
            isVoertuig = true;
        }
        addLoco(newWagenNummer, newLengte, newMassa, newRemming, isVoertuig);
    }

    /**
     * Checks op alle data ingeput voor een wagen toe te voegen
     */
    private void voegWagenToe()
    {
        long newWagenNummer = Long.parseLong(wagenNummer.getText());
        int newLengte = Integer.parseInt(lengte.getText());
        int newMassa = Integer.parseInt(massa.getText());
        int newLading = Integer.parseInt(lading.getText());
        int newRemming = Integer.parseInt(remming.getText());

        // Kijk of wagen handrem heeft of niet
        if(handRem.getText().equals(""))
        {
            addWagen(newWagenNummer, newLengte, newMassa, newLading, newRemming);
        }
        else
        {
            int newHandRem = Integer.parseInt(handRem.getText());
            addWagen(newWagenNummer, newLengte, newMassa, newLading, newRemming, newHandRem);
        }
    }

    /**
     * Voeg een wagen toe zonder schroefrem
     * 
     * @param long de nummer van de wagen
     * @param intiger lengte van de wagen in CM
     * @param intiger de massa van de wagen in KG
     * @param intiger de massa van de lading in KG
     * @param intiger de remming van de wagen
     */
    public void addWagen(long newWagenNummer, int newLengte, int newMassa, int newLading, int newRemming)
    {
        Wagen wagen = new Wagen(newWagenNummer, newLengte, newMassa, newLading, newRemming);
        trein.voegWagenToe(wagen);
    }

    /**
     * Voeg een wagen toe met schroefrem
     * 
     * @param long de nummer van de wagen
     * @param intiger lengte van de wagen in CM
     * @param intiger de massa van de wagen in KG
     * @param intiger de massa van de lading in KG
     * @param intiger de remming van de wagen
     * @param intiger remming van schroefrem
     */
    public void addWagen(long newWagenNummer, int newLengte, int newMassa, int newLading, int newRemming, int newHandRem)
    {
        Wagen wagen = new Wagen(newWagenNummer, newLengte, newMassa, newLading, newRemming, newHandRem);
        trein.voegWagenToe(wagen);
    }

    /**
     * Voeg een Locomotief toe
     * 
     * @param long de nummer van de loco
     * @param intiger lengte van de loco in CM
     * @param intiger de massa van de loco in KG
     * @param intiger de remming van de loco
     */
    public void addLoco(long newLocoNummer, int newLengte, int newMassa, int newRemming, boolean newAlsVoertuig)
    {
        Loco loco = new Loco(newLocoNummer, newLengte, newMassa, newRemming, newAlsVoertuig);
        trein.voegLocoToe(loco);
    }
}

Upvotes: 1

Related Questions