JComboBox

Chr__Au

Mitglied
Hallo ich wollte in meiner GUI eine JComboBox in zwei Inhaltsbereiche Anzeigen lassen aber es erschien nur in einem. Kann es sein, das eine ComboBox nur in einem Inhaltsbereich angezeigt wird?

Liegt es vielleicht darin das Java dann nicht mehr herausfinden kann welches Feld angewählt wurde?

Einen Programmierfehler kann ich eigentlich ausschließen. Ich kann mir eigentlich nur vorstellen, dass es daran liegt, dass man ansonsten ja zwei Elemente gewählt haben kann.


Gruß

Christopher
 

L-ectron-X

Gesperrter Benutzer
Kann es sein, das eine ComboBox nur in einem Inhaltsbereich angezeigt wird?
In dem Bereich, in dem du die Komponente zuletzt eingebaut hast, stimmts?

Definitiv ein Programmier-/Denkfehler. Du kannst eine Referenz eines GUI-Objektes auf der GUI nicht mehrmals darstellen. Willst du mehr Objekte darstellen, musst du mehrere Objekte erzeugen.
 

Chr__Au

Mitglied
Danke hat sich schon erledigt. Verwende nun DefaultComboBoxModel da beide ComboBoxen die selben werte haben sollen und nur in zwei unterschiedlichen JTabbedPane angezeigt werden sollen.

Ja du hast recht es wird in dem Bereich angezeigt welcher als letztes erzeugt wurde.
 

Chr__Au

Mitglied
Ich habe noch mal ein kleines Problem und zwar wenn ich zusätzliche Elemente zu der DefaultComboBoxModel hinzufügen möchte (zur Laufzeit) aber immer wenn ich dies machen möchte, wird mir einer NullPointerException aber warum?

Fürs gesamte, ich speichere Fahrzeuge in einer HashMap und die keys werden in den ComboBoxen angezeigt. Dies klappt auch wenn ich das entsprechende Fenster öffne nur wenn ich den Button drücke wird mir dann die NullPointerException geworfen. Das neue Fahrzeug wird aber in der HashMap erzeugt.

Update:

Die Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at de.BenzinVerbrauchsRechner.GUI.newFahrzeug$1.actionPerformed(newFahrzeug.java:99)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Der Code der die Elemente füllen soll (unabhängig davon dass schon vorhanden Elemente doppelt erstellt werden).
Java:
public void setCombo() {

		fahrzeuge_JCombo = new DefaultComboBoxModel();
		try{
			Set<String> set = Main.data.fahrzeuge.keySet();
			Iterator<String> iter = set.iterator();
			while (iter.hasNext()) {
				this.fahrzeuge_JCombo.addElement((String) iter.next());
				
			}
			
		}catch (NullPointerException e){
			Main.textAusgaben("Kein Fahrzeug in der HashMap vorhanden <MainGUI>", true);
			this.fahrzeuge_JCombo.addElement(" ");
		}

Der Code zum Füllen ist in MainGUI.java und die Aufrufende Methode befindet sich in newFahrzeug.java im selben Packet.
 
Zuletzt bearbeitet:
S

SlaterB

Gast
der Fehler tritt in Zeile 99 auf, niemand weiß hier welche Zeile das ist, wäre das nicht eine sehr spannende Info?

von den geposteten kann es Zeile 5-11 kaum sein, da fängst du eine NullPointerException ja verrückterweise ab,
bzw. ich vermute dass es schon in Zeile 8 zu der Exception kam weil this.fahrzeuge_JCombo null ist,
aus demselben Grund kommt es dann in Zeile 14 im catch wieder zu einer NullPointerException, diesmal nicht abgefangen,
das ist dann die Exception die du als Fehlermeldung siehst

grundsätzlich ist eine NullPointerException immer sehr simpel zu finden, zumindest der erste Teil, welches Objekt bzw. Referenz/ Variable null ist,
wenn nicht direkt aus der Zeile ersichtlich, dann z.B. davor einfache Ausgaben:
System.out.println("ist x null?: "+(x==null));

der zweite Fall ist dann bisschen interessanter, WARUM die Referenz nicht gesetzt ist,
da braucht es mehr Code, z.B. von der Initialisierung,
ein beliebter Fehler ist, beim Erstellen von GUI-Komponenten lokale Variablen anzulegen, während das Klassenattribut null bleibt

edit:
ok, fahrzeuge_JCombo wird ja in der Methode selber gesetzt, falls es nicht mehr Code in der Methode gibt dürfte this.fahrzeuge_JCombo != null sein,
ist Main zufällig ein schlecht benannte Variable statt eines Klassennamens?
Variablen immer klein schreiben,

welche Zeile ist 99, welches Objekt ist null? das sollte ja doch herauszufinden sein

ist die gepostete Fehlermeldung vielleicht die selber gecatchte? dann kann der Fehler im try/catch liegen,
Main.data.fahrzeuge.keySet() bietet viele null-Möglichkeiten, alles testen/ prüfen
 
Zuletzt bearbeitet von einem Moderator:

Chr__Au

Mitglied
Schon mal danke für deine Antwort. Die Methode setCombo() wird beim erstellen des Objekts MainGUI durchlaufen (aufruf durch den Konstruktor) dort hat fahrzeug_JCombo eine Referenz auf ein DefaultComboboxModel aber wenn ich es nun über ein Objekt der Klasse newFahrzeug (actionPerformed) aufrufe, dann wird diese Exception geworfen.

Java:
//newFahrzeug.java

/**
 * 
 */
package de.BenzinVerbrauchsRechner.GUI;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Iterator;
import java.util.Set;

import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

import de.BenzinVerbrauchsRechner.Main.Main;

/**
 * @author Christopher Auth
 * 
 */
public class newFahrzeug extends JFrame {
	final JFrame frame;
	final JTextField kennzeichen;
	final JRadioButton benzin;
	final JRadioButton diesel;

	/**
	 * 
	 */
	public newFahrzeug() {
		super("Neues Fahrzeug anlegen"); // Titel des Fensters
		this.frame = this;
		
		setBounds(Toolkit.getDefaultToolkit().getScreenSize().width / 2 - 150,
				Toolkit.getDefaultToolkit().getScreenSize().height / 2 - 150,
				300, 300);
		//this.setDefaultCloseOperation(EXIT_ON_CLOSE);

		frame.setLayout(new GridBagLayout());
		GridBagConstraints gbc = new GridBagConstraints();

		gbc.insets = new Insets(5, 5, 5, 5);

		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.weightx = 0.5;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		add(new JLabel(" "), gbc);

		
		gbc.gridx = 1;
		gbc.weightx = 0;
		JLabel kennzeichen_label = new JLabel("Kennzeichen");
		kennzeichen_label.setToolTipText("Geben Sie Ihr Kennzeichen mit Bindestrichen ein (M-QV-75312)");
		add(kennzeichen_label, gbc);
		
		gbc.gridx = 2;
		gbc.weightx = 0;
		kennzeichen = new JTextField("", 10);
		add(kennzeichen, gbc);
		
		gbc.gridx = 3;
		gbc.weightx = 0.5;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		add(new JLabel(" "), gbc);
		
		gbc.gridx = 1;
		gbc.gridy = 1;
		gbc.gridwidth = 2;
		JPanel radioPanel = new JPanel();
		benzin = new JRadioButton("Benzin");
		diesel = new JRadioButton("Diesel");
		ButtonGroup sprit = new ButtonGroup();
		sprit.add(benzin);
		sprit.add(diesel);
		radioPanel.setLayout(new BoxLayout(radioPanel, BoxLayout.X_AXIS));
		radioPanel.add(benzin);
		radioPanel.add(diesel);
		add(radioPanel, gbc);
		
		gbc.gridx = 1;
		gbc.gridy = 2;
		gbc.gridwidth = 2;
		JButton anlegen = new JButton("Anlegen");
		anlegen.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				Main.textAusgaben("Starte der actionPerformed", false);
				Main.data.neuesFahrzeug(kennzeichen.getText().toUpperCase(), benzin.isSelected());
				Main.textAusgaben("Erfolgreiche Erstellung des Fahrzeugs", false);
				//MainGUI.objMainGUI.setCombo();
				Main.textAusgaben(("Fahrzeug_JCombo null? " + (MainGUI.objMainGUI.fahrzeuge_JCombo==null)), true);
				//MainGUI.objMainGUI.getCombo().addElement(kennzeichen.getText().toUpperCase());
				frame.setVisible(false);
				
			}
		});
		add(anlegen, gbc);
frame.addWindowListener(new WindowListener() {
			
			@Override
			public void windowOpened(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowIconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeiconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeactivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowClosing(WindowEvent e) {
				frame.setVisible(false);
				
			}
			
			@Override
			public void windowClosed(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowActivated(WindowEvent arg0) {
				// TODO Auto-generated method stub
				
			}
		});
		
	}

}

Java:
//MainGUI.java

package de.BenzinVerbrauchsRechner.GUI;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.Iterator;
import java.util.Set;

import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;

import de.BenzinVerbrauchsRechner.Berechnung.Calculate;
import de.BenzinVerbrauchsRechner.Main.Main;

/**
 * <html><h2>Erzeugt das Hauptfenster des BenzinVerbrauchsRechners.</h2> <h3>
 * Erstellte Inhalte</h3>
 * <ul>
 * <li>
 * <h4>Menü</h4>
 * <ul>
 * <li>Datei</li>
 * <ul>
 * <li>neues Fahrzeug</li>
 * <li>Beenden</li>
 * </ul>
 * <li>Hilfe</li>
 * <ul>
 * <li>Hilfe</li>
 * <li>Info</li>
 * </ul>
 * </ul> <li>Tabs</li>
 * <ul>
 * <li>Berechnen</li>
 * <li>Statistik</li>
 * </ul>
 * <li>Inhaltsbereiche</li>
 * <ul>
 * <li>Als Layout wurde das GridBagLayout verwendet.
 * </ul>
 * </ul>
 * 
 * 
 * 
 * </ul>
 * 
 * </html>
 * 
 * @author Daniel Schaschinek und Christopher Auth
 * @version 0.2 pre
 */
public class MainGUI {

	private JFrame frame;
	public static MainGUI objMainGUI;

	private JPanel berechnung;
	private JPanel statistik;
	public DefaultComboBoxModel fahrzeuge_JCombo;

	JPanel radioPanel;
	JButton berechnen;
	JTextField datum_tf;
	JTextField alt_KM_tf;
	JTextField kM_tf;
	JTextField benzin_tf;
	JTextField liter_tf;
	JRadioButton e10_radio;
	JRadioButton super_radio;
	JRadioButton super_Plus_radio;
	JTextField last_verbrauch;
	JTextField verbrauch;
	JTextField last_kosten;
	JTextField kosten;

	/**
	 * @param args
	 *            Zuerst nichts
	 */
	// public static void main(String[] args) {
	// MainGUI main = new MainGUI();
	// main.frame.setResizable(false);
	// main.frame.setVisible(true);
	//
	// }
	public JFrame getFrame() {
		return frame;
	}

	/**
	 * Ruft die Initializierungsmethode Methode auf.
	 */
	public MainGUI() {

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

	/**
	 * Die Initialisierungsmehtode ruft folgende Methoden auf.<br>
	 * setLook()<br>
	 * setWindow()<br>
	 * setMenuBar()<br>
	 * setBerechnung()<br>
	 */
	private void initialize() {

		setWindow();
		setMenuBar();
		setCombo();
		setTabbedPane();
		setBerechnung();
		setStatistik();

	}

	/**
	 * 
	 */
	public void setCombo() {

		fahrzeuge_JCombo = new DefaultComboBoxModel();
		try {
			Set<String> set = Main.data.fahrzeuge.keySet();
			Iterator<String> iter = set.iterator();
			while (iter.hasNext()) {
				this.fahrzeuge_JCombo.addElement((String) iter.next());

			}

		} catch (NullPointerException e) {
			Main.textAusgaben(
					"Kein Fahrzeug in der HashMap vorhanden <MainGUI>", true);
			this.fahrzeuge_JCombo.addElement(" ");
		}
		Main.textAusgaben(("Fahrzeug_JCombo null? " + (fahrzeuge_JCombo==null)), true);

		// fahrzeuge_JCombo.addElement(Main.data.fahrzeuge.keySet());

		// fahrzeuge_JCombo.addElement("GP-AB-123");
		// fahrzeuge_JCombo.addElement("GP-BA-321");

	}

	public DefaultComboBoxModel getCombo() {
		return fahrzeuge_JCombo;

	}

	/**
	 * 
	 */
	private void setStatistik() {
		JLabel fahrzeug;
		JLabel last_verbrauch;
		JLabel verbrauch;
		JLabel last_kosten;
		JLabel kosten;

		GridBagConstraints gbc = new GridBagConstraints();
		// gbc.anchor = GridBagConstraints.NORTHWEST;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.insets = new Insets(5, 5, 5, 5);
		gbc.gridx = 0;
		gbc.gridy = 0;

		fahrzeug = new JLabel("Fahrzeug");
		fahrzeug.setToolTipText("Wählen Sie Ihr Fahrzeug");
		statistik.add(fahrzeug, gbc);

		gbc.gridy++;

		last_verbrauch = new JLabel(
				"<html><p>Spritverbrauch<br> letzte Tankfüllung</p></html>");
		last_verbrauch.setToolTipText("Letzter Spritverbrauch");
		statistik.add(last_verbrauch, gbc);

		gbc.gridy++;

		verbrauch = new JLabel("Gesamtverbrauch");
		verbrauch.setToolTipText("Gesamtverbrauch");
		statistik.add(verbrauch, gbc);
		// Spalte 2
		gbc.gridx++;
		gbc.gridy = 0;
		gbc.weightx = 0.5;

		JComboBox fahrzeuge_Combo = new JComboBox(fahrzeuge_JCombo);
		statistik.add(fahrzeuge_Combo, gbc);

		gbc.gridy++;
		gbc.insets = new Insets(5, 5, 5, 2);
		this.last_verbrauch = new JTextField("", 10);
		this.last_verbrauch.setEditable(false);
		statistik.add(this.last_verbrauch, gbc);

		gbc.gridy++;
		gbc.insets = new Insets(5, 5, 5, 5);
		this.verbrauch = new JTextField("", 10);
		this.verbrauch.setEditable(false);
		statistik.add(this.verbrauch, gbc);

		gbc.gridx++;
		gbc.weightx = 0;
		gbc.gridy = 1;
		// gbc.anchor = GridBagConstraints.CENTER;
		gbc.insets = new Insets(5, 2, 5, 5);
		statistik.add(new JLabel("l/100km"), gbc);

		gbc.gridx++;
		// gbc.anchor = GridBagConstraints.NORTHWEST;
		gbc.gridy = 0;
		gbc.insets = new Insets(5, 5, 5, 5);
		gbc.gridy++;
		last_kosten = new JLabel("Kosten");
		statistik.add(last_kosten, gbc);

		gbc.gridy++;

		kosten = new JLabel("Gesamtkosten");
		statistik.add(kosten, gbc);

		gbc.gridx++;
		gbc.gridy = 1;
		gbc.weightx = 0.5;

		this.last_kosten = new JTextField("", 10);
		this.last_kosten.setEditable(false);
		statistik.add(this.last_kosten, gbc);

		gbc.gridy++;

		this.kosten = new JTextField("", 10);
		this.kosten.setEditable(false);
		statistik.add(this.kosten, gbc);

		JLabel lab = new JLabel(new ImageIcon(
				"\\Projekt\\BenzinVerbrauchsRechner\\src\\Tankstelle.jpg"));
		// lab.setBackground( new Color( 240, 240, 240));
		lab.setOpaque(true);
		gbc.gridx = 0;
		gbc.gridy++;
		gbc.gridwidth = 5;
		gbc.weightx = 1.0;
		gbc.weighty = 1.0;
		gbc.fill = GridBagConstraints.BOTH;
		statistik.add(lab, gbc);

	}

	/**
	 * Erstellt einen Tab Inhaltsbereich
	 */
	private void setTabbedPane() {
		JTabbedPane tabPane = new JTabbedPane(JTabbedPane.TOP);
		frame.getContentPane().add(tabPane, BorderLayout.CENTER);
		new GridBagLayout();

		berechnung = new JPanel();
		berechnung.setLayout(new GridBagLayout());
		tabPane.addTab("Berechnung", null, berechnung,
				"Tragen Sie Ihre Tankdaten ein");

		statistik = new JPanel();
		statistik.setLayout(new GridBagLayout());
		tabPane.addTab("Statistik", null, statistik,
				"Sehen Sie Ihre Tankstatistik");

	}

	private void setBerechnung() {
		JLabel datum_JLabel;
		JLabel altKM_JLabel;
		JLabel kM_JLabel;
		JLabel benzinPreis_JLabel;
		JLabel liter_JLabel;

		GridBagConstraints gbc = new GridBagConstraints();
		gbc.anchor = GridBagConstraints.NORTHWEST;
		gbc.insets = new Insets(5, 5, 5, 5);
		gbc.fill = GridBagConstraints.HORIZONTAL; // HORIZONTAL
		gbc.gridx = 0;
		gbc.gridy = 0;

		datum_JLabel = new JLabel("Datum");
		berechnung.add(datum_JLabel, gbc);

		gbc.gridy++;
		altKM_JLabel = new JLabel("Alter KM-Stand");
		berechnung.add(altKM_JLabel, gbc);

		gbc.gridy++;
		kM_JLabel = new JLabel("KM-Stand");
		berechnung.add(kM_JLabel, gbc);

		gbc.gridy++;
		gbc.gridy++;
		benzinPreis_JLabel = new JLabel("Benzin Preis");
		berechnung.add(benzinPreis_JLabel, gbc);

		gbc.gridy++;
		liter_JLabel = new JLabel("Getankte Liter");
		berechnung.add(liter_JLabel, gbc);
		// Spalte 2
		gbc.gridx++;
		gbc.gridy = 0;
		gbc.weightx = 0.5;

		datum_tf = new JTextField("", 10);
		berechnung.add(datum_tf, gbc);

		gbc.gridy++;

		alt_KM_tf = new JTextField(getAlterKm((String)fahrzeuge_JCombo.getSelectedItem()), 10);
		alt_KM_tf.setEditable(false);
		berechnung.add(alt_KM_tf, gbc);

		gbc.gridy++;

		kM_tf = new JTextField("", 10);
		berechnung.add(kM_tf, gbc);

		gbc.gridy++;
		gbc.gridy++;

		benzin_tf = new JTextField("", 10);
		berechnung.add(benzin_tf, gbc);

		gbc.gridy++;
		liter_tf = new JTextField("", 10);
		berechnung.add(liter_tf, gbc);

		gbc.gridy++;

		berechnen = new JButton("Berechnen");
		berechnen.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				last_verbrauch.setText(Double.toString(Calculate.durchLiter(
						Integer.parseInt(kM_tf.getText())
								- Integer.parseInt(alt_KM_tf.getText()),
						Double.parseDouble(liter_tf.getText()))));
				

			}
		});
		berechnung.add(berechnen, gbc);

		// Spalte 3
		gbc.gridx++;
		gbc.gridy = 0;
		gbc.weightx = 0;
		JLabel fahrzeug = new JLabel("Fahrzeug");

		fahrzeug.setToolTipText("Wählen Sie Ihr Fahrzeug");
		berechnung.add(fahrzeug, gbc);
		// Spalte 4
		gbc.gridx++;
		gbc.weightx = 0.5;

		final JComboBox fahrzeuge_Combo = new JComboBox(fahrzeuge_JCombo);
		fahrzeuge_Combo.setToolTipText("Wählen Sie Ihr Fahrzeug");
		// fahrzeuge_Combo.addActionListener(new ActionListener() {
		//
		// @Override
		// public void actionPerformed(ActionEvent arg0) {
		// if(Main.data.getFahrzeug((String)(fahrzeuge_Combo.getSelectedItem())).isBenziner()
		// == true){
		//
		// radioPanel.setVisible(true);
		// }else if
		// (Main.data.getFahrzeug((String)(fahrzeuge_Combo.getSelectedItem())).isBenziner()
		// == false){
		//
		// radioPanel.setVisible(false);
		// }
		//
		// }
		// });
		fahrzeuge_Combo.addItemListener(new ItemListener() {

			@Override
			public void itemStateChanged(ItemEvent e) {
				if (Main.data.getFahrzeug(
						(String) (fahrzeuge_Combo.getSelectedItem()))
						.isBenziner() == true) {
					radioPanel.setVisible(true);

				} else {

					radioPanel.setVisible(false);
				}

			}
		});
		berechnung.add(fahrzeuge_Combo, gbc);

		// Spalte 5
		gbc.gridy++;
		gbc.gridy++;
		gbc.gridheight = 4;
		radioPanel = new JPanel();

		radioPanel.setLayout(new BoxLayout(radioPanel, BoxLayout.Y_AXIS));
		ButtonGroup radioGroup = new ButtonGroup();

		e10_radio = new JRadioButton("E 10");
		e10_radio.setToolTipText("Super Benzin mit 10% Bioethanol");
		super_radio = new JRadioButton("Super 95");
		super_radio.setToolTipText("Normales Super Benzin mit 5% Bioethanol");
		super_Plus_radio = new JRadioButton("Super Plus");
		super_Plus_radio.setToolTipText("Super Plus Benzin");

		radioPanel.add(e10_radio);
		radioPanel.add(super_radio);
		radioPanel.add(super_Plus_radio);
		radioGroup.add(e10_radio);
		radioGroup.add(super_radio);
		radioGroup.add(super_Plus_radio);
		berechnung.add(radioPanel, gbc);
		if (Main.data.getFahrzeug((String) fahrzeuge_Combo.getSelectedItem())
				.isBenziner() == true) {
			radioPanel.setVisible(true);
		} else {
			radioPanel.setVisible(false);
		}

		JLabel lab = new JLabel("");
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.weighty = 1.0; // request any extra vertical space
		gbc.gridheight = 0;
		gbc.gridx = 0; // aligned with button 2
		gbc.gridy = 20; // third row
		berechnung.add(lab, gbc);

	}

	/**
	 * @param selectedItem
	 * @return
	 */
	private String getAlterKm(String fahrzeug) {
		String result;
		try{
			result = (Integer.toString(Main.data.getFahrzeug(fahrzeug).lastTanken().getKm()));
		}catch (ArrayIndexOutOfBoundsException e){
			result = Integer.toString(Main.data.getFahrzeug(fahrzeug).getKm());
		}
		return result;
	}

	/**
	 * Erstellt ein JMenuBar Objekt
	 */
	private void setMenuBar() {
		JMenuBar menueLeiste = new JMenuBar();
		JMenu file = new JMenu("Datei");
		JMenu help = new JMenu("Hilfe");

		JMenuItem newVehicle = new JMenuItem("neues Fahrzeug");
		file.add(newVehicle);
		newVehicle.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {

				new newFahrzeug().setVisible(true);

			}
		});
		JMenuItem exit = new JMenuItem("Beenden");
		exit.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.exit(1);

			}
		});
		file.add(exit);
		JMenuItem helpItem = new JMenuItem("Hilfe");
		help.add(helpItem);
		helpItem.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				JOptionPane.showMessageDialog(null,
						"Es ist momentan noch keine Hilfeseite eingerichtet",
						"Hilfe", 1);

			}
		});
		JMenuItem zuruecksetzten = new JMenuItem("Zurücksetzten");
		zuruecksetzten
				.setToolTipText("Setzt das Programm auf den Werkszustand zurück (Tankdaten sind weiterhin vorhanden");
		zuruecksetzten.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				File file = new File("init.txt");
				file.delete();
				if (Main.dev == true) {
					String[] arg = { "-dev" };
					Main.main(arg);
				} else {
					String[] arg = { "null" };
					Main.main(arg);
				}
				frame.setVisible(false);
			}
		});
		help.add(zuruecksetzten);
		JMenuItem info = new JMenuItem("Info");
		help.add(info);
		info.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				JOptionPane.showMessageDialog(null,
						"Es ist momentan noch keine Info eingerichtet", "Info",
						1);

			}
		});

		menueLeiste.add(file);
		menueLeiste.add(help);
		frame.setJMenuBar(menueLeiste);

	}

	/**
	 * Erstellt einen neuen JFrame mit dem Name "Benzinverbrauchsrechner" und
	 * weißt Ihm die Größe zu.<br>
	 * Der Mehtode setDefaultCloseOperation() wird der wert "EXIT_ON_CLOSE"
	 * zugewießen.
	 */
	private void setWindow() {
		frame = new JFrame("Benzinverbrauchsrechner");
		frame.setBounds(
				Toolkit.getDefaultToolkit().getScreenSize().width / 2 - 250,
				Toolkit.getDefaultToolkit().getScreenSize().height / 2 - 250,
				450, 500);
		// frame.setBounds(100, 100, 450, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
	}

	/**
	 * setLook() ändert den Look des JavaProgrammes in eine Standard Windows
	 * Aplikation<br>
	 */

}

Ich weiß dass das Coding nicht sehr Ordentlich programmiert ist. Aber es ist nur für ein Projekt in der FH. Ich denke das Problem sind diese beiden Klassen warum ich von newFahrzeug nicht auf die Variable fahrzeug_JCombo zugegriffen werden kann, ist Wahrscheinlichkeit der Grund dass ich keine werte in die Combobox eintragen kann.
 
S

SlaterB

Gast
der Code ist ohne weitere Klassen wie vor allem Main recht unbrauchbar und grob überflogen unauffällig,

was ist denn jetzt ganz konkret und ausführlich beschrieben das Problem?
klickst du auf den Anlegen-Button von newFahrzeug? (Klassen übrigens groß schreiben, packages klein, wichtige Regeln)
was passiert denn nun dann oder auch nicht, im Moment ist dort ja MainGUI.objMainGUI.setCombo() auskommentiert,
tritt der Fehler also nicht auf, oder doch? nichts ist zu verstehen, alles könntest du mit Worten beschreiben

welche Zeile in setCombo() den Fehler wirft hast du weiter noch nicht verraten

> Main.textAusgaben(("Fahrzeug_JCombo null? " + (MainGUI.objMainGUI.fahrzeuge_JCombo==null)), true);
ist eine Zeile die du mir zuliebe eingefügt hast? NACH dem setCombo()-Aufruf mit der Exception wohl bisschen spät,
wenn fahrzeuge_JCombo auch erst in der Methode gesetzt wird, dann VOR der Methode auch bisschen früh,
hast du die edits in meinem ersten Posting gelesen?
 

Chr__Au

Mitglied
Ok alles von vorne.

In der Datei src.zip liegen alle Klassen die ich für das Programm bisher geschrieben habe. Das Programm starte ich mit der Main.java in dem Paket benzinverbrauchsrecher.Main dort habe ich eine kleine Funktion integriert die mir helfen soll Fehler zu finden aber die Fehler/Ereignisse während der Präsentation in der FH nicht anzuzeigen [textAusgabe(...) ] Wenn Ihr das Programm nun startet kommt Ihr zur FirstWindow-Klasse die erfragt ob Ihr bereits ein Konto habt, dort bitte auf "Dies ist mein erster Besuch" klicken ein Kennzeichen eingeben (ist egal was) und auf "Kennung Berechnen" klicken und dann auf "Anlegen" nun kommt Ihr zur MainGUI-Klasse die das Hauptfenster meines Projektes darstellt, in dieser Klasse wird dann beim erzeugen des Objektes (MainGUI()) auf die Methode setCombobox() (Zeile 143) durchlaufen. Dies klappt alles wunderbar es wird auf die HashMap zugegriffen die dann das Kennzeichen vom Anfang gibt.

Jetzt ist das Problem wenn ich ein neues Fahrzeug ("Datei" > "Neues Fahrzeug") hinzufügen möchte (Klasse NeuesFahrzeug) wird die Exception geworfen sobald ich auf Anlegen klicke, ich denke die Exception wird in Zeile 108 momentan geworfen, immer an der stelle an der ich auf das Objekt der Klasse DefaultComboboxModel zugrifen möchte. Mein Gedanke ist, dass ich über "DefaultComboboxModel".addElement(...) ein neues Kennzeichen in die Liste eintragen kann.

Gibt es vielleicht eine andere Möglichkeit die Beiden Comboboxen in "Berechnen" und im "Statistik" Tab zu füllen. Eingefügt werden die Comboboxen in Zeile 211 für Statistik (in der Klasse MainGUI") und in Zeile 420 (ebenfalls in der MainGUI-Klasse)

Die Exception in NeuesFahrzeug im die es geht wird auch ohne den Startparameter "-dev" angezeigt.

Ich entschuldige mich noch mal für die unklare Fragestellung am Anfang des Beitrags.
 

Anhänge

  • src.zip
    87,5 KB · Aufrufe: 1
S

SlaterB

Gast
um Entschuldigungen gehts nicht und ich kann das übrigens bis morgen nicht testen

soweit schon eine neue Frage: ist MainGUI.objMainGUI null, wird diese statische Variable je gesetzt?
 

Chr__Au

Mitglied
Man bin ich blöd das war der Fehler danke. Ich wollte die im Konstruktor mit der Referenz des MainGUI Objektes belegen und hab aber die Zuweisung nicht gemacht, und ich mach schon seit Samstag da rum und such woran es liegen könnte. Danke für alles es klappt die Comboboxen werden gefüllt.

Ohne Heu kann das beste Pferd nicht furzen! :toll:

Danke SlaterB für den Tipp, das finde ich bei euch hier im Forum so genial ihr schaut kurz übers Coding und findet sofort woran es liegt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
M JComboBox ersten Eintrag leerlassen bzw. Platzhalter Java Basics - Anfänger-Themen 1
Tommy135 Klassen jComboBox macht nicht was sie soll Java Basics - Anfänger-Themen 4
S ArrayListe in einer JComboBox anzeigen Java Basics - Anfänger-Themen 10
H JComboBox wird nicht angezeigt Java Basics - Anfänger-Themen 3
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
T Einträge in jComboBox aus Liste übernehmen Java Basics - Anfänger-Themen 1
T Auslesen mehrerer jComboBox (-en) Java Basics - Anfänger-Themen 4
H JCombobox Java Basics - Anfänger-Themen 1
D JComboBox duplizieren Java Basics - Anfänger-Themen 2
T jComboBox Java Basics - Anfänger-Themen 9
GadgetSofa jComboBox mit dem Button verbinden. Aber wie?? Java Basics - Anfänger-Themen 4
A GUI Absturz nach 3x benutzen einer JComboBox Java Basics - Anfänger-Themen 11
S Erste Schritte JComboBox Java Basics - Anfänger-Themen 1
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
S JComboBox automatisch füllen Java Basics - Anfänger-Themen 3
C JComboBox "Hilfstext" anzeigen Java Basics - Anfänger-Themen 11
T Datentypen Jcombobox Array Java Basics - Anfänger-Themen 1
J JComboBox in andere Klasse Java Basics - Anfänger-Themen 2
S Variablen auslesen beim JCombobox Java Basics - Anfänger-Themen 0
K JCombobox Eclipse Java Basics - Anfänger-Themen 7
D JComboBox erzeugen Java Basics - Anfänger-Themen 1
T JComboBox Java Basics - Anfänger-Themen 3
B ArrayLists in JCombobox Java Basics - Anfänger-Themen 10
M JComboBox und ItemListener/ItemEvent Problem Java Basics - Anfänger-Themen 3
M JComboBox Auswahl Java Basics - Anfänger-Themen 10
N Compiler-Fehler JComboBox DefaultListCellRenderer Java Basics - Anfänger-Themen 2
J JComboBox - Auswahl auslesen Java Basics - Anfänger-Themen 2
J jcombobox.getSelectedItem - nullpointerexception Java Basics - Anfänger-Themen 3
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
M JComboBox Obergrenzen/Untergrenze festlegen? Java Basics - Anfänger-Themen 5
B JComboBox(editable) Java Basics - Anfänger-Themen 6
K JComboBox hat volle Höhe uber das gesamte JPane, warum? Java Basics - Anfänger-Themen 2
S JComboBox mit ArrayList füllen Java Basics - Anfänger-Themen 7
C Ausgewähltes Element einer JCombobox in JTextField Java Basics - Anfänger-Themen 3
S JComboBox füllen Java Basics - Anfänger-Themen 9
R Auf auswahl in ner JComboBox reagieren Java Basics - Anfänger-Themen 3
T Frage zu JComboBox Java Basics - Anfänger-Themen 6
G JComboBox wird nicht gezeichnet Java Basics - Anfänger-Themen 3
N JComboBox mit Dateinamen befüllen Java Basics - Anfänger-Themen 7
M JComboBox => Item String => Color Java Basics - Anfänger-Themen 2
StrikeTom Editable JComboBox + enter Wie??? Java Basics - Anfänger-Themen 3
J JComboBox Listener Java Basics - Anfänger-Themen 6
F Werte aus JComboBox auslesen und Zahlen zuordnen Java Basics - Anfänger-Themen 5
S JComboBox Platzhalter Java Basics - Anfänger-Themen 7
J jComboBox auf default setzen wie? Java Basics - Anfänger-Themen 3
J daten über jComboBox ausgeben wie? Java Basics - Anfänger-Themen 2
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
E JComboBox Java Basics - Anfänger-Themen 4
J jComboBox.getSelectedIndex() Java Basics - Anfänger-Themen 8
J Funktion Auslösen über JComboBox Java Basics - Anfänger-Themen 2
T JComboBox klappt nur ein- bis zweimal auf Java Basics - Anfänger-Themen 30
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
Developer_X JComboBox getSelectedFilè??? Java Basics - Anfänger-Themen 4
T Daten eines Ordners in JCombobox anzeigen Java Basics - Anfänger-Themen 5
M Einträge in JComboBox farblich hinterlegen? Java Basics - Anfänger-Themen 2
6 Dritte JComboBox in Abhaengigkeit von zwei vorherigen Java Basics - Anfänger-Themen 4
G 2. JComboBox in Abhängigkeit der 1. JCombobox füllen Java Basics - Anfänger-Themen 2
S Problem mit JComboBox Java Basics - Anfänger-Themen 9
H jcombobox mit nur einem Item Java Basics - Anfänger-Themen 7
G Inhalt einer JComboBox wechseln Java Basics - Anfänger-Themen 5
G Problem mit JComboBox Java Basics - Anfänger-Themen 15
G JComboBox Strukturiert anzeigen Java Basics - Anfänger-Themen 6
Schandro Hotkeys bei JComboBox abschalten Java Basics - Anfänger-Themen 3
G JComboBox soll beim Öffnen eine andere JCB öffnen Java Basics - Anfänger-Themen 2
P Hilfe für JComboBox, bmp einbinden/bestimmte punkte auf bmp Java Basics - Anfänger-Themen 3
G JComboBox - BasicComboPopup Java Basics - Anfänger-Themen 4
S Inhalt der JComboBox vergrößtert die JCB ? Java Basics - Anfänger-Themen 2
B Werte aus einer JCombobox in eine Liste Java Basics - Anfänger-Themen 16
mwildam JComboBox FocusGained feuert nicht wenn editable Java Basics - Anfänger-Themen 4
F ComboBox im Vektor auslesen, Vektor<JComboBox> Java Basics - Anfänger-Themen 6
S Jcombobox und 2maliges anzeigen wegen ItemStateChanged? Java Basics - Anfänger-Themen 3
W setModel feuert ActionEvent bei JComboBox Java Basics - Anfänger-Themen 2
G Frage zu JComboBox Java Basics - Anfänger-Themen 2
W Actionlistener oder Itemlistener bei JCombobox ? Java Basics - Anfänger-Themen 4
G JComboBox Java Basics - Anfänger-Themen 7
G JComboBox macht Probleme Java Basics - Anfänger-Themen 7
G JComboBox alphabetisch sortieren Java Basics - Anfänger-Themen 2
D Locale zur Laufzeit über JComboBox laden? Java Basics - Anfänger-Themen 17
G JComboBox um eine Methode erweitern Java Basics - Anfänger-Themen 2
G jcombobox deaktivieren Java Basics - Anfänger-Themen 4
M Werte aus Jcombobox sollten als int-Werte zurück gegeben . Java Basics - Anfänger-Themen 7
D Items in JComboBox überprüfen Java Basics - Anfänger-Themen 3
G JComboBox zweckentfremden ? Java Basics - Anfänger-Themen 5
N JCombobox Pfeil nach unten bild auf linke seite, geht das? Java Basics - Anfänger-Themen 8
T JComboBox Problem Java Basics - Anfänger-Themen 4
D JComboBox titel Java Basics - Anfänger-Themen 16
M füllen JComboBox funktioniert nicht Java Basics - Anfänger-Themen 11
J JCombobox Item auswählen Java Basics - Anfänger-Themen 13
A Text einer JComboBox während der Laufzeit ändern ? Java Basics - Anfänger-Themen 4
dercheffe 3x jcombobox nacheinander füllen Java Basics - Anfänger-Themen 6
J Inhalt der JComboBox variable Java Basics - Anfänger-Themen 2
O JComboBox Item soll sich als String speichern Java Basics - Anfänger-Themen 5
D JComboBox ohne ItemListener Java Basics - Anfänger-Themen 18
B unvollständige Anzeige von JComboBox Werten Java Basics - Anfänger-Themen 5
G JComboBox gibt SelectedItem immer doppelt aus Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben