Variablen Problem mit return String[]

benjilein

Neues Mitglied
Hallo,

ich habe mich soeben in diesem Forum angemeldet und bin im Bezug auf die Java Programmierung ein frischling.

Ich habe geringfügige Erfahrung mit C und LabView (hier eher sinnlos...) und möchte mit nun etwas Wissen im Bereich der Java Programmierung aneignen.

Ich bedanke mich schonmal im Voraus für eure/deine Hilfe!

Problembeschreibung:
Ich frage mittels eigener Methode Benutzerdaten ab. Diese fasse ich in ein String[] Array zusammen und gebe diese wieder "return".

In einer zweiten Methode möchte ich die einzelnen Strings des Arrays benutzen. Somit starte ich die oben beschriebene Methode um die Daten einzulesen. Später werden die Daten dann ins Frame gezeichnet.

Leider werden die Abfragen ("JOptionPane.showInputDialog") nun zweimal durchgeführt. Leider komme ich nicht dahinter wo der Fehler liegt...

Die "import" Komponenten sind so viele, weil das Programm etwas größer ist. Ich habe nur den relevanten Teil herauskopiert.

Java:
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.Color;
import javax.imageio.*;
import java.io.*;
import javax.swing.*;

public class Test extends JPanel
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;


		public  String[] Benutzerdatenabfrage()
		{
			String Bearb = JOptionPane.showInputDialog("Bearbeiter:");
			String Dat = JOptionPane.showInputDialog("Bitte Stillstandsdatum eingeben:");
			String bearbeiter = "Sachbearbeiter: " + Bearb;
			String datum = "Stillstandsdatum: " + Dat;
						
			return new String[] {Datum,Bearbeiter};
		}

public void paint (Graphics g) 
		{
    
    	String[] Benutzerdaten = Benutzerdatenabfrage();
    	String Datum = Benutzerdaten[0];
    	String Bearbeiter = Benutzerdaten[1];
    	
    	super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.drawImage(Background, 0, 0, this);
		g.setFont(new java.awt.Font("Sans",5,20));
		g.setColor(Color.BLACK);
		g.drawString(Bearbeiter, 20, 800);
		g.drawString(Batum, 20, 820);
		}
}
 
Zuletzt bearbeitet:
Wo liegt das Problem, es macht genau das, was du sagst. Es ruft dir zweimal deine JOptionPane auf und dann ist gut.

Was willst du wirklich haben?

PS: Wenn du mit Swing arbeitest, dann überschreibe die paintComponent Methode und nicht die paint (das ist nämlich AWT).
PPS: In Java gilt für Variablen- und Methodenbezeichnungen camelCase. Außer Klassen/Interfaces haben einen UpperCamelCase.
 
Danke für die schnelle Antwort. Das Problem ist, dass die "JOptionPane.showInputDialog" insgesamt vier mal erscheint.

1. Bearbeiter:
2. Bitte Stillstandsdatum eingeben:
3. Bearbeiter:
4. Bitte Stillstandsdatum eingeben:

Es sollten aber nur die ersten zwei kommen, danach sind die Daten ja eingelesen.
 
Ja das ist klar, jedes mal wenn die Komponenten neu gezeichnet werden, rufst du dein String-Array ab. Das kann nicht vorhergesehen werden, wann Java entscheidet, wann neu gezeichnet wird.

Hier mal ein Beispiel, wie es nur einmal aufgerufen wird:

Java:
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Test {
  public static void main(String... args) {
    new Test();
  }
  
  public Test() {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationByPlatform(true);
    
    frame.setSize(600, 400);
    frame.add(new MyPanel());
    frame.setVisible(true);
  }
  
  class MyPanel extends JComponent {
    private static final long serialVersionUID = 1L;
    private String[] attrs;
    
    public MyPanel() {
      attrs = getAttributes();
    }
    
    private String[] getAttributes() {
      String str1 = JOptionPane.showInputDialog("Str1:");
      String str2 = JOptionPane.showInputDialog("Str2:");
      return new String[] { str1, str2 };
    }
    
    @Override
    protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      for (int i = 0; i < attrs.length; i++) {
        g.drawString(attrs[i], 300, 150 + i * 20);
      }
    }
  }
}
 
Edith sagt: Flown war natürlich schneller



[OT]Meiner Meinung nach rufst du irgendwo ein zweites mal deine Funktion auf,
Kopiert man deinen geposteten Code, und ändert

Java:
			return new String[] {Datum,Bearbeiter};
zu Datum, bearbeiter

wird 2x Joptionpane aufgerufen.
Sicher das du nur 1x paint aufrufst?
Sicher das nicht irgendwo neu gezeichnet wird?
Sicher das du an keiner anderen stelle die Methode Benutzerdatenabfrage() verwendest?


Verfolge dein Programm doch einfach mal Schritt für Schritt mit dem Debugger, dann wirst du schon merken an welcher stelle die JOptionPanes aufgerufen werden.. 🙂


grüße
Zet[/OT]
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben