String Übergabe

Saban

Erfahrenes Mitglied
Hallo Zusammen!

ich hab nicht wirklich ein Problem sondern eher eine Frage und zwar hab ich zwei Klassen und möchte aus der Klasse a einen String an Klasse b weitergeben. Nun habe ich das immer so gemacht das ich in der Klasse b ein Objekt von der Klasse a erzeugt habe und mit diesem Objekt eine getMethode vollzogen nun wollte ich wissen ob das auch irgendwie eleganter geht. Ich will den Pfad den die Klasse DirPanel hat an das DatePanel weitergeben.

Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DirPanel extends JPanel{
	
	private JTextField 	tf_pfad = new JTextField();
	private JLabel 		lb_pfad = new JLabel("Pfad in dem die Datei(en) liegt");
	private JButton		bt_chooser = new JButton();
	
	public DirPanel(){
		/* Eigenschaften des FileChooser-Buttons */
		bt_chooser.setFocusPainted(false);
		bt_chooser.setBorderPainted(false);
		bt_chooser.setContentAreaFilled(false);
		bt_chooser.setIcon(new ImageIcon("D:\\Programm Files\\Programmieren\\Symbole für Buttons\\Roland Symbole\\22x22\\actions\\document-open.png"));
		
		bt_chooser.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				/* Der eigentliche FileChooser */
				JFileChooser chooser = new JFileChooser();
				
				/* Durch diese Option werden nur Verzeichnisse im Auswahl-Dialog angezeigt */
				chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
				/* Titel des FileChoosers */
				chooser.setDialogTitle("Verzeichnis wählen");
				/* Der Öffnen Button wird zum Auswählen Button umbenannt */
				chooser.setApproveButtonText("Auswählen");
				/* Tooltip auf den Öffnen Button setzen */
				chooser.setApproveButtonToolTipText("Drücken, um Verzeichnis auszuwählen");
				int result = chooser.showOpenDialog(null);
				/* Was soll nach der Auswahl passieren */
				if(result == JFileChooser.APPROVE_OPTION)
				{
					/* Ausgabe des Pfades im TextFeld */
					tf_pfad.setText(chooser.getSelectedFile().toString());
				}
			}
		});
		
		/* Eigenschaften des Labels für die Pfad Auswahl */
		lb_pfad.setFont(new Font("Arial", Font.PLAIN, 10));
		
		/* Setzt einen Rahmen um die Pfad-Angabe */
		setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Pfad"));			
		
		/* Eigenschaften des TextFelds zur Pfad Ausgabe */
		tf_pfad.setEditable(false);
		tf_pfad.setFont(new Font("Arial", Font.BOLD, 12));
		
		/* Layout des Panels */
		setLayout(null);
		
		lb_pfad.setBounds			( 10, 25,150, 12);
		tf_pfad.setBounds			( 10, 40,400, 25);
		bt_chooser.setBounds		(420, 40, 25, 25);
		
		add(lb_pfad);
		add(bt_chooser);
		add(tf_pfad);
	}
	
	public File getPfad(){
		File file = new File(tf_pfad.getText());
		return file;
	}
}

Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DatePanel extends JPanel {
	private JTextField 	tf_von = new JTextField();
	private JTextField 	tf_bis = new JTextField();
	private JLabel		lb_von = new JLabel("Von:");
	private JLabel		lb_bis = new JLabel("Bis:");
	private JLabel 		lb_date = new JLabel("Zeitraum in dem gesucht werden soll");
	private JButton 	bt_start = new JButton();
	
	public DatePanel(){
		/* Setzt einen Rahmen um die Pfad-Angabe */
		setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Datum"));			
		
		/* Eigenschaften des Start-Buttons */
		bt_start.setIcon(new ImageIcon("D:\\Programm Files\\Programmieren\\Symbole für Buttons\\Roland Symbole\\22x22\\actions\\go-next.png"));
		bt_start.setFocusPainted(false);
		bt_start.setBorderPainted(false);
		bt_start.setContentAreaFilled(false);
		
		bt_start.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0) {
				/* Hier muss noch abgefragt werden ob ein Pfad angegeben ist bevor das Datum geprüft wird */
				datePrüfer(tf_von);
				datePrüfer(tf_bis);
				
				if(tf_von.getText().equals("") || tf_bis.getText().equals("")){
					System.out.println("Bitte geben Sie ein korrektes Datum an!");
				}
				else{
					System.out.println("Starte Suche!");
				}
			}
		});
		
		/* Eigenschaften der TextFelder */
		tf_von.setHorizontalAlignment(JTextField.RIGHT);
		tf_von.setFont(new Font("Arial", Font.BOLD, 12));
		tf_von.setDocument(new TextFeldBegrenzung(8));
		
		tf_bis.setHorizontalAlignment(JTextField.RIGHT);
		tf_bis.setFont(new Font("Arial", Font.BOLD, 12));
		tf_bis.setDocument(new TextFeldBegrenzung(8));
		
		/* Eigenschaften des Labels für die Auswahl Zeitraums */
		lb_date.setFont(new Font("Arial", Font.PLAIN, 10));
		
		/* Layout des Panels */
		setLayout(null);
		
		lb_date.setBounds	( 10, 25,250, 12);
		lb_von.setBounds	( 10, 40, 50, 25);
		tf_von.setBounds	( 40, 40,100, 25);
		lb_bis.setBounds	(170, 40, 50, 25);
		tf_bis.setBounds	(200, 40,100, 25);
		bt_start.setBounds	(420, 40, 25, 25);
		
		add(lb_date);
		add(lb_von);
		add(tf_von);
		add(lb_bis);
		add(tf_bis);
		add(bt_start);
	}
	
	public void datePrüfer(JTextField tf){
		/* Übernimmt das Datum aus dem TextFeld */
		String datum = tf.getText();
		/* Formatiert das Datum */
		SimpleDateFormat df = new SimpleDateFormat("dd.MM.yy");
		/* Weißt den Parser an auf existierende Datumswerte zu achten, ohne die Zeile wird aus 32.01.2003, 01.02.2003 */
		df.setLenient(false);
		/* Überprüft das Datum auf Korrektheit */
		try {
		    Date date = df.parse(datum);
		} catch (ParseException e) {   
			/* Bei falschem Datum wird das TextFeld geleert */
			tf.setText("");
		}
	}
}

Danke im voraus

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Also die einzige Lösung die mir eingefallen ist wäre das ich den Getter von DirPanel auf static setzte also auch das TextFeld tf_pfad und dann einfach die Methode im DatePanel aufrufe. Mir wäre so was wie ein Objekt das beide Klassen befüllen können lieber nur hab ich keine Ahnung wie man so was anlegt.

MfG
Saban
 
Welche Klasse in deinem Programm kennt denn sowohl das DirPanel, als auch das DatePanel?

Das es sowas wie static gibt vergisst du am besten mal ganz schnell wieder.
 
Hi Zeja!

Also ich habe noch diese 3 Klassen

Java:
import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.BoxLayout;
import javax.swing.JFrame;

public class SuchFrame extends JFrame{
	public SuchFrame(){
		setTitle("Bilder Suche");
		setSize(470, 190);
		setResizable(false);
		
		DatePanel pa_date = new DatePanel();
		DirPanel pa_dir	= new DirPanel();	
		
		Container aktuelleGUI = getContentPane();
		
		aktuelleGUI.setLayout(new BoxLayout(aktuelleGUI, BoxLayout.Y_AXIS));
		aktuelleGUI.add(pa_dir);		
		aktuelleGUI.add(pa_date);		
	}
}

Diese hier ist nur für die Begrenzung der Textfelder
Java:
import javax.swing.text.PlainDocument;
import javax.swing.text.BadLocationException;
import javax.swing.text.AttributeSet;

public class TextFeldBegrenzung extends PlainDocument {
    private int limit;

    public TextFeldBegrenzung(int newLimit) {
        super();
        if (limit < 0) {
            limit = 0;
        }
        else {
            limit = newLimit;
        }
    }
       
    private String mask = "0123456789.";
    private int maxLength = 8;

    public void insertString(int off, String str, AttributeSet a) throws BadLocationException {
        if(str.length()+getLength() > maxLength) {
            return;
        }
        if(mask.indexOf(str)==-1) {
            return;
        }
        super.insertString(off,str,a);    
    }
}

Java:
import javax.swing.JFrame;

public class Anzeigen {
	public static void main(String [] args){
		SuchFrame frame = new SuchFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}

Warum ist das mit static so schlimm?

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Zurück