Zum Inhalt springen

Look-And-Feel einstellen


kochphilip

Empfohlene Beiträge

Guten Tag,

ich möchte eine Programm (Fenster.java) erstellen welches ein Fenster öffnet auf dem ein Button ist, wenn ich auf den Button klicke soll sich noch ein Fenster öffnen. Als weitere Funktion soll das Look-And-Feel umgestellt werden können, wenn ich das Look-And-Feel auf "Windows" stelle soll der Button der sich öffnet auch das Look-And-Feel bekommen.

Aber es fängt schon an das ich beim versuch das Programm zu kompelieren, folgenden Fehler bekomme:

java.lang.NoSuchMethodError: main

Exception in thread "main"


import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import javax.swing.event.*;

import java.util.Properties;

import java.io.FileInputStream;

import java.util.Iterator;


public class Fenster

extends JFrame

implements ActionListener

{

	private String plaf = "javax.swing.plaf.metal.MetalLookAndFeel";

	private JButton btn = new JButton("Hilfe");

	private static Fenster wnd = new Fenster();


	public Fenster()

	{

		super("Test Fenster");


		JMenuBar menubar = new JMenuBar();

		menubar.add(createFileMenu());

		setJMenuBar(menubar);


		Container contentPane = getContentPane();

		contentPane.setLayout(new GridLayout(1,1));	


		JPanel zeile1 = new JPanel();

      	zeile1.setLayout(new GridLayout(1,2));

		btn.addActionListener(this);

      	zeile1.add(btn);            

     	zeile1.setBorder(BorderFactory.createEtchedBorder());

     	contentPane.add(zeile1);

	}


	private JMenu createFileMenu()

	{

		JMenu ret = new JMenu("Design");

		ret.setMnemonic('D');

		JMenuItem mi;


		// Metal

		mi = new JMenuItem("Metal",'l');

 		mi.addActionListener(this);

		ret.add(mi);


		// Motif

		mi = new JMenuItem("Motif",'f');

 		mi.addActionListener(this);

		ret.add(mi);


		// Windows

		mi = new JMenuItem("Windows",'W');

		mi.addActionListener(this);

		ret.add(mi);


		return ret;

	}

	public void actionPerformed(ActionEvent event)

	{

		String cmd = event.getActionCommand();

		try {

			//PLAF-Klasse auswählen

			if (cmd.equals("Metal")){

				plaf = "javax.swing.plaf.metal.MetalLookAndFeel";

			}else if (cmd.equals("Motif")){

				plaf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";

			}else if (cmd.equals("Windows")) {

				plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";

			}

			//LAF umschalten

			UIManager.setLookAndFeel(plaf);

			SwingUtilities.updateComponentTreeUI(this);

		}catch(UnsupportedLookAndFeelException e) {

			System.err.println(e.toString());

		}catch (ClassNotFoundException e) {

			System.err.println(e.toString());

		}catch(InstantiationException e) {

			System.err.println(e.toString());

		}catch(IllegalAccessException e) {

			System.err.println(e.toString());

		}


		if(cmd == "Hilfe")

		{

			JOptionPane.showMessageDialog(wnd,"hier wird Ihnen geholfen","die Hilfe",1);

		}

	}

	public static void main(String[] args)

	{

		wnd.setResizable(false);

		wnd.setLocation(100,100);

		wnd.setSize(500	,175);

		wnd.setVisible(true);

	}

}

Meine Fragen sind also wie folgt:

1. Wie bekomme ich den Fehler weg?

2. Wie bekomme ich hin, das sich das Fenster mit dem richtigen Look-And-Feel öffnet?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also das Programm läuft und macht auch alles das was es soll. Getestet unter OSX 10.4.11 mit:

java version "1.5.0_13"

Java 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-241)

Java HotSpot Client VM (build 1.5.0_13-121, mixed mode, sharing)

Ggf. prüfst Du mal die Java-Umgebung (CLASSPATH usw), evtl postest Du auch mal die Informationen.

HTH Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja, wobe ich mittlerweile glaube das es am Compiler liegt, weil es in einem anderen funktioniert hat. Jetzt habe ich ausprobiert eine zweite Klasse zu schreiben die ein Fenster öffnet und für die Eingabe eines Arrays zuständig ist:


import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import javax.swing.event.*;

import java.util.Properties;

import java.io.FileInputStream;

import java.util.Iterator;


public class PKONV0002

extends JFrame

implements ActionListener, CaretListener

{


	static Properties properties = null;


	private static final String[] mandanten = { "D", "A", "CH", "GB", "F","NL" };

	private static final String[] firmen    = { "JKG","PIV" };

	private static String hilfe; 


	private static int mandant;

	private static int firma;

	private static String vdat;

	private static String plz;

	private static String agrp;

	private static String wpnr;


	private JComboBox comfnr = new JComboBox(firmen);

	private JComboBox comma = new JComboBox(mandanten);

	private JTextField tfwpnr = new JTextField(3);

	private JTextField tfplz = new JTextField(5);

	private JTextField tfvdat = new JTextField(10);

	private JTextField tfagrp = new JTextField(2);

	private JButton btnhilfe = new JButton("Hilfe");

	private JButton btnwcodes = new JButton("WCodes");

	private JButton btnvorschau = new JButton("Vorschau");

	private JButton btnerstellen = new JButton("Erstellen");

    private JProgressBar pb = new JProgressBar();


 	private static PKONV0002 wnd = new PKONV0002(); 	

 	private static PKONV0003 wcodes = new PKONV0003();

 	private String plaf = "javax.swing.plaf.metal.MetalLookAndFeel";


	public PKONV0002()

	{

		super("Automatisierte SQL-Datenkonvertierung");


		JMenuBar menubar = new JMenuBar();

		menubar.add(createFileMenu());

		setJMenuBar(menubar);


		Container contentPane = getContentPane();

		contentPane.setLayout(new GridLayout(5,1));


		try

		{

			properties = new Properties();

			properties.load(new FileInputStream("./PKONV0002.properties"));

		}

		catch(Exception Ex)

		{

			System.err.println("Zugriff auf Konfigurationsdatei nicht möglich!");

		}

		hilfe = properties.getProperty("Hilfe");


// Zeile 1: 

		JPanel zeile1 = new JPanel();

		zeile1.setLayout(new GridLayout(1,4));


		JLabel lblma = new JLabel(

				"  Mandant:",

				SwingConstants.LEFT

				);

		zeile1.add(lblma);

		comma.setEditable(false);

		comma.addActionListener(this);

		zeile1.add(comma);				

		JLabel lblfnr = new JLabel(

				"  Firmen-Nr:",

				SwingConstants.LEFT

				);

		zeile1.add(lblfnr);

		comfnr.addActionListener(this);

		comma.setEditable(false);

		zeile1.add(comfnr);	


		zeile1.setBorder(BorderFactory.createEtchedBorder());

		contentPane.add(zeile1);


// Zeile 2:		

		JPanel zeile2 = new JPanel();

		zeile2.setLayout(new GridLayout(1,4));


		JLabel lblwpnr = new JLabel(

				"  WPNR:",

				SwingConstants.LEFT

				);	

		zeile2.add(lblwpnr);

		tfwpnr.setToolTipText("Einschränkung der Werbeaktion");

		tfwpnr.addCaretListener(this);

		zeile2.add(tfwpnr);

		JLabel lblplz = new JLabel(

				"  PLZ:",

				SwingConstants.LEFT

				);	

		zeile2.add(lblplz);

		tfplz.setToolTipText("Einschränkung auf die Postleitzahl");

		tfplz.addCaretListener(this);

		zeile2.add(tfplz);


		zeile2.setBorder(BorderFactory.createEtchedBorder());

		contentPane.add(zeile2);


// Zeile 3:	

		JPanel zeile3 = new JPanel();

		zeile3.setLayout(new GridLayout(1,4));


		JLabel lblVdat = new JLabel(

				"  Versanddatum:",

				SwingConstants.LEFT

				);	

		zeile3.add(lblVdat);

		tfvdat.setToolTipText("Eingabe des Versanddatums");

		tfvdat.addCaretListener(this);

		zeile3.add(tfvdat);

		JLabel lblAGrp = new JLabel(

				"  Ausgabegruppe:",

				SwingConstants.LEFT

				);	

		zeile3.add(lblAGrp);

		tfagrp.setToolTipText("Eingabe der Ausgabegruppe");

		tfagrp.addCaretListener(this);

		zeile3.add(tfagrp);


		zeile3.setBorder(BorderFactory.createEtchedBorder());

		getContentPane().add(zeile3);


// Zeile 4	

		JPanel zeile4 = new JPanel();

 		zeile4.setLayout(new GridLayout(1,4));


		btnhilfe.addActionListener(this);

		zeile4.add(btnhilfe);

		btnwcodes.addActionListener(this);

		zeile4.add(btnwcodes);

		btnvorschau.addActionListener(this);

//		zeile4.add(btnVorschau);

 		btnerstellen.addActionListener(this);

		zeile4.add(btnerstellen);


		zeile4.setBorder(BorderFactory.createEtchedBorder());

		getContentPane().add(zeile4);


// Zeile 5

		getContentPane().add(pb);

		pb.setStringPainted(true);

		pb.setString("");



//		addWindowListener(new WindowClosingAdapter(true));

	}


	private JMenu createFileMenu()

	{

		JMenu ret = new JMenu("Design");

		ret.setMnemonic('D');

		JMenuItem mi;


		// Metal

		mi = new JMenuItem("Metal",'l');

 		mi.addActionListener(this);

		ret.add(mi);


		// Motif

		mi = new JMenuItem("Motif",'f');

 		mi.addActionListener(this);

		ret.add(mi);


		// Windows

		mi = new JMenuItem("Windows",'W');

		mi.addActionListener(this);

		ret.add(mi);

/*		

		// Mac

		mi = new JMenuItem("Mac",'M');

		mi.addActionListener(this);

		ret.add(mi);

*/

		return ret;

	}


	public void caretUpdate(CaretEvent event)

	{

		agrp = tfagrp.getText();

		wpnr = tfwpnr.getText();

		vdat = tfvdat.getText();

		plz  = tfplz.getText();

		pb.setString("");

	}


	public void actionPerformed(ActionEvent event)

	{	

		pb.setString("");

		mandant = comma.getSelectedIndex();

		mandant++;

		firma = comfnr.getSelectedIndex();

		firma++;

		this.tfplz.setEditable(true);

		if (mandant != 1)

		{

			comfnr.setSelectedIndex(1);

			firma = 1;

			tfplz.setEditable(false);

		}


		String cmd = event.getActionCommand();

		System.out.println(cmd);


		try {

			//PLAF-Klasse auswählen

			if (cmd.equals("Metal") || cmd.equals("Motif") || cmd.equals("Windows") || cmd.equals("Mac"))

			{

				if (cmd.equals("Metal"))

				{

					plaf = "javax.swing.plaf.metal.MetalLookAndFeel";

				}else if (cmd.equals("Motif"))

				{

					plaf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";

				}else if (cmd.equals("Windows")) 

				{

					plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";

				}

				else if (cmd.equals("Mac"))

				{

					plaf = "javax.swing.plaf.mac.MacLookAndFeel";

				}

				pb.setString("Design geändert in "+cmd);

				//LAF umschalten

				UIManager.setLookAndFeel(plaf);

				SwingUtilities.updateComponentTreeUI(this);

			}

			if (cmd == "Vorschau" || cmd == "Erstellen")

			{

				int nok = 0;

				System.out.println("1");

				String info = "Ihre Eingaben: \n";


				info = info+"\n Mandant:                "+mandant+" ("+comma.getSelectedItem()+")";

				info = info+"\n Firma:                      "+firma+" ("+comfnr.getSelectedItem()+")"; 

				info = info+"\n WPNR:                     "+wpnr;

				System.out.println("2");

				if(wpnr.length() == 0)

				{

 					info = info+"   XXX";

 					nok = 1;

				}


				System.out.println("2a");

				if(mandant==1) 

				{

					info = info+"\n PLZ:                          "+plz;

				}

				System.out.println("3");

				info = info+"\n Versanddatum:      "+vdat;

				if(vdat.length() == 0)

				{

					info = info+"   ***";

					nok = 1;

				}

				System.out.println("4");

				info = info+"\n Ausgabegruppe:    "+agrp;

				if(agrp.length()== 0)

				{

					info = info+"   ***";

					nok = 1;

				}

				info = info+"\n \n Werbecodes:";

				System.out.println("5");

				Iterator itwcodes = wcodes.getWCodes();

				Iterator itavar = wcodes.getAVar();

 				itwcodes.next();

 				itavar.next();


				while(itwcodes.hasNext())

				{

					info = info+"\n( "+(String)(itavar.next())+" ): "+(String)(itwcodes.next());

				}

				System.out.println("6");

				if (nok == 0)

				{

					nok = JOptionPane.showConfirmDialog(wnd, info, "Vorschau", 2);

				}

				else

				{

 					info = info+"/n*** Falsche Eingabe";

					JOptionPane.showMessageDialog(wnd,info,"Fehler...",1);

				}

				if (nok == 0 && cmd == "Erstellen")

				{	

					pb.setString("Daten werden verarbeitet");

					System.out.println("Erstellen der Textdatei");

					pb.setString("Datei wurde erstellt");

				}

			}

			if (cmd == "Hilfe")

			{

				JOptionPane.showMessageDialog(wnd,hilfe,"die Hilfe",1);

			}

 			if (cmd == "WCodes")

			{

				wcodes.zeige(plaf);

			}  

		}catch(UnsupportedLookAndFeelException e) {

			System.err.println(e.toString());

		}catch (ClassNotFoundException e) {

			System.err.println(e.toString());

		}catch(InstantiationException e) {

			System.err.println(e.toString());

		}catch(IllegalAccessException e) {

			System.err.println(e.toString());

		}

	}


	public static void main(String[] args)

	{

		WindowListener wl = new WindowAdapter()

		{

				public void windowClosing(WindowEvent we)

				{

						System.exit(0);

				}

		};

		wnd.addWindowListener(wl);

		wnd.setResizable(false);

		wnd.setLocation(100,100);

		wnd.setSize(500	,175);

		wnd.setVisible(true);

	}

}

das funktioniert gar nicht, bei beiden Compilern nicht (Eclise und JavaEditor)

Link zu diesem Kommentar
Auf anderen Seiten teilen

und die zweite Klasse


import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import javax.swing.event.*;

import java.util.ArrayList;

import java.util.Iterator;


public class PKONV0003

extends JFrame

implements ActionListener, CaretListener

{


   private JTextField tfwcodes = new JTextField(25);

   private JTextField tfavar = new JTextField(5);

   private JTextField tfindakt = new JTextField(2);

   private JTextField tfindmax = new JTextField(2);

   private JButton btnvor = new JButton(">");

   private JButton btnzurueck = new JButton("<");


   private static int indmax = 1;                                                       

   private static int indakt = 1;

   private static String cmd = " ";


   private ArrayList<String> avar = new ArrayList<String>();

   private ArrayList<String> wcodes = new ArrayList<String>();


   private static PKONV0003 wnd = new PKONV0003();


   public PKONV0003()

   {

      super("Eingabe der Werbecodes");


      Container contentPane = getContentPane();

      contentPane.setLayout(new GridLayout(3,1));


// Zeile 1:


      JPanel zeile1 = new JPanel();

      zeile1.setLayout(new GridLayout(1,2));


      JLabel lblavar = new JLabel(

            "  Ausgabevariante:",

            SwingConstants.LEFT

            );

      zeile1.add(lblavar);

      tfavar.addCaretListener(this);

      tfavar.setToolTipText("Eingabe der Ausgabevariante");

      zeile1.add(tfavar);            


      zeile1.setBorder(BorderFactory.createEtchedBorder());

      contentPane.add(zeile1);


// Zeile 2:


      JPanel zeile2 = new JPanel();

      zeile2.setLayout(new GridLayout(1,2));


      JLabel lblwcodes = new JLabel(

            "  Werbecodes:",

            SwingConstants.LEFT

            );   

      zeile2.add(lblwcodes);

      tfwcodes.addCaretListener(this);

      tfwcodes.setToolTipText("Eingabe der Werbecodes");

      zeile2.add(tfwcodes);


      zeile2.setBorder(BorderFactory.createEtchedBorder());

      contentPane.add(zeile2);


// Zeile 3:


      JPanel zeile3 = new JPanel();

      zeile3.setLayout(new FlowLayout());


      btnzurueck.setToolTipText("Zurück");

      btnzurueck.addActionListener(this);

      zeile3.add(btnzurueck);


      tfindakt.setToolTipText("Springe zu...");

      tfindakt.addActionListener(this);

      tfindakt.setText("1");

      zeile3.add(tfindakt);


      JLabel lblflash = new JLabel(

            "  /",

            SwingConstants.LEFT

            );   

      zeile3.add(lblflash);


      tfindmax.setEditable(false);

      tfindmax.setText("1");

      zeile3.add(tfindmax);


      btnvor.setToolTipText("Vor");

      btnvor.addActionListener(this);

      zeile3.add(btnvor);


      zeile3.setBorder(BorderFactory.createEtchedBorder());

      getContentPane().add(zeile3);


      avar.add(" ");

      wcodes.add(" ");

      avar.add("");

	  wcodes.add(""); 


   }


   public void caretUpdate(CaretEvent event)

   {    

   		if (cmd == " ")  

   		{

	        avar.set(indakt,tfavar.getText());

			wcodes.set(indakt,tfwcodes.getText());

		}

   }


   public void actionPerformed(ActionEvent event)

   {       

      cmd = event.getActionCommand();    

      if (wcodes.get(indakt).length() == 0)

      {

      	if (cmd != "<" || indakt != 1)

      	{ 

	      	System.out.println("Index: "+indakt);

	      	avar.remove(indakt);

	      	wcodes.remove(indakt);

	      	indmax--;

	      }

      	if (cmd == ">") {indakt--;}

      }


      if (cmd == ">")

      {     

      	indakt++; 

		if(indakt > indmax)

		{

			avar.add("");

			wcodes.add("");

			indmax++;

		}

	  }   

	  if (cmd == "<")

	  {

	  	if(indakt > 1)

	  	{

	  		indakt--; 		

	  	}

	  }

	  tfavar.setText(avar.get(indakt));

	  tfwcodes.setText(wcodes.get(indakt));

      tfindmax.setText(String.valueOf(indmax));                

      tfindakt.setText(String.valueOf(indakt));

      cmd = " ";

   }


   public void zeige(String plaf)

   {   

         wnd.setResizable(false);

    	 wnd.setLocation(400,250);

     	 wnd.setSize(350   ,115);

         wnd.setVisible(true);            

   }


   public Iterator getWCodes()

   {

   		return wcodes.iterator();

   }

   public Iterator getAVar()

   {

   		return avar.iterator();

   }


   public static void main(String[] args)

   {

   }

} 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

ich habe mir jetzt die Klassen nicht angesehen, aber Deine Fehlermeldung deutet auf einen Fehler zur Laufzeit hin, nicht beim Kompileren. Der NoSuchMethodError sollte zur Laufzeit geworfen werden, wenn eine Methode, die angesprochen wird (z.B. über Reflection) nicht gefunden werden kann.

Kannst Du das bitte präzisieren? Tritt der Fehler zur Compile- oder Laufzeit auf?

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

PKONV0003.java:24: <identifier> expected

private ArrayList<String> avar = new ArrayList<String>();

das habe ich bekommen als ich mit der Console kompelieren wollte...

und wenn ich das Programm mit Eclipse starte kommt ein Fehler während der Laufzeit nach dieser Zeile (in PKONV0002 in der Methode ActionactionPerformed()):

if(wpnr.length() == 0)

at PKONV0002.actionPerformed(PKONV0002.java:251)

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.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(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 bekommt die Methode length() nicht hin, wobei ich das bei der anderen Klasse (PKONV0003) hinbekommen habe

(das bezieht sich jetzt alles auf die letzten beiden Klassen die ich gepostet habe, die erste hat funktioniert (nur halt nicht unter Eclipse))

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine beiden Klassen lassen sich kompilieren _und_ ausführen. Es treten weder Kompilierungs- noch Laufzeitfehler auf.

Bitte konfiguriere zuerst einmal Deine Umgebung richtig und vollständig, so dass Du zuerst einmal unter der Konsole fehlerfrei arbeiten kannst, danach prüft Du die Konfiguration in Deinen IDE's.

Ich habe es sowohl unter der Konsole, als auch Eclipse, als auch XCode laufen lassen.

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich hatte nicht auf "Erstellen" geklickt, aber da kommt eine Null-Pointer-Exception, da wird also irgendein Objekt NULL sein. Dein Code ist unübersichtlich, vor allem ein Tipp trenne Design und Eventlistener, es macht es wesentlich übersichtlicher und man kann Fehler schneller finden.

Dokumentiere den Code, vor allem verstehe ich deine Inkrements teilweise nicht bzw. ich möchte Deinen Code auch nicht komplett durchlesen, um Deine Gedanken nachvollziehen zu können. Außerdem ein guter Ratschlag, wenn eine Methode länger als eine Bildschirmseite ist, dann sollte man sich die Gedanken machen, ob man es nicht besser in mehrere Methoden aufteilen kann

HTH Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...