Andere Klasse mit ActionEvent aufrufen, aber wie?

Status
Nicht offen für weitere Antworten.

Slive

Mitglied
Hallo miene Herren/Damen,

ich bin noch ein totaler Noob was Java angeht. Ihr könnt mir sicher bei mienem Problemchen helfen :lol:.
Das GUI steht bereits. Nun will ich die Klasse "Screenschot.java" mittels Menubar "Speichern" aufrufen.

Screenshot.java:
Code:
import com.sun.image.codec.jpeg.JPEGCodec;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
public class Screenshot
{
  public static void main( String[] args ) throws Exception
  {
    Thread.sleep( 2000 );
    BufferedImage bi = new Robot().createScreenCapture(
      new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
    OutputStream  out  = new FileOutputStream( "c:/screenshot.jpg" );
    JPEGCodec.createJPEGEncoder( out ).encode( bi );
    out.close();
    ImageIO.write( bi, "jpg", new File("screenshot.jpg") );
    System.exit( 0 );
  }
}

Meine Mainklasse (GUI) hat diesen Eintrag:
Code:
     extras.add(new AbstractAction("Speichern")
      { 
      public void actionPerformed(ActionEvent e) 
      {
     //Befehl??????????????
       
      } 
});

Fragen:

-Wie "entMaine" ich die Klasse Screenshot.java?
-Wie schaffe ich eine Verbindung?[/quote]

Danke

Mfg
Slive
 

Slive

Mitglied
Hallo nocxsville,

danke für deine schnelle Antwort. Ich bin mitlerweile so weit, dass die Klasse Screenshot.java fehlerfrei da steht.
Code:
import com.sun.image.codec.jpeg.JPEGCodec;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;

public class Screenshot {
	
	    Thread.sleep( 2000 );
	    BufferedImage bi = new Robot().createScreenCapture(
	     new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
	    OutputStream  out  = new FileOutputStream( "c:/screenshot.jpg" );
	    JPEGCodec.createJPEGEncoder( out ).encode( bi );
	    out.close();
	    ImageIO.write( bi, "jpg", new File("screenshot.jpg") );
	    System.exit( 0 );
}

Diese macht einen Screenshot vom Bildschirm und speichert das Bild dann auf c:\ ab.
Ich will, dass das mein Programm einen Screenshot macht, wenn ich auf "Speichern" drücke.
In meiner Main sieht es so aus:
Code:
//MenuBar
      JMenuBar menuBar = new JMenuBar();
      setJMenuBar(menuBar);
      
      JMenu datei = new JMenu("Datei");
      menuBar.add(datei);
      JMenu extras = new JMenu("Extras");
      menuBar.add(extras);
      
      datei.add(new AbstractAction("Neu")
      { 
      public void actionPerformed(ActionEvent e) 
      {
      mc.reset();
      numPoints.setText("  0 Punkte ");
      } 
 });

      extras.add(new AbstractAction("Speichern")
      { 
      public void actionPerformed(ActionEvent e) 
      {
    	  //<<--- Was kommt hier den rein??????
         // Sowas wie "Führe jetzt bitte die Klasse Screenshot.java aus!"

       
      } 
});

Wie gesagt, bin noob :). Freu mich schon, wenns funktioniert!!

Mfg
Slive
 

L-ectron-X

Gesperrter Benutzer
Die Klasse Screenshot hat noch mehrere Fehler.
Zunächst mal muss der Aufruf von Thread.sleep(2000); in einen try-catch-Block.
Und damit die Klasse auch noch ausgeführt werden kann, sollte dein Code sinnvoll in Methoden aufgeteilt werden. Eine Lösung dafür wäre z.B. den Defaultkonstruktor zu überschreiben, den Code also in eine Konstruktormethode zu setzen.
Und erst dann kannst du in deiner actionPerformed()-Methode ein Objekt der Klasse Screenshot erzeugen und das Bild speichern.
Und damit nicht alles gleich beendet wird, muss der Aufruf System.exit(0); weg.
 
G

Gast

Gast
das im Screenshot muss in eine Methode rein..
so nackt geht das nicht..

zb
public static void takeScreenshot(){
}

das System.exit muss weg = beenden

was kommt dort rein?

Screenshot.takeScrenshot();

so in etwa ;-)
 

The_S

Top Contributor
Deine Klasse Screenshot ist so aber nciht fehlerfei ;) . Wenn du deine Klasse weiterhin einfach so ausführbar machen möchtest, pack das Ganze wieder in die Main-Methode und schreib dann in deine actionPerformed

Code:
Screenshot.main(null);

Alternativ kannst du deinen code in der Screenshot Klasse einfach in eine nicht statische Methode auslagern, dir ein neues Objekt der Klasse Screenshot erzeugen und dann die von dir definierte Methode aufrufen.

[edit] Hui, da war ich aber langsam ... :oops:
 

Slive

Mitglied
Hallo ich bins wieder.

So funktionirt das ganze schonmal:
Code:
import com.sun.image.codec.jpeg.JPEGCodec;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;

public class Screenshot
{
  public static void main( String[] args ) throws Exception
  {
    Thread.sleep( 2000 );
    BufferedImage bi = new Robot().createScreenCapture(
    new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
    OutputStream  out  = new FileOutputStream( "D:/screenshot.jpg" );
    JPEGCodec.createJPEGEncoder( out ).encode( bi );
    out.close();
    ImageIO.write( bi, "jpg", new File("screenshot.jpg") );
    
  } 
}
Code:
 extras.add(new AbstractAction("Speichern")
      { 
      public void actionPerformed(ActionEvent e) 
      {
    	  try {
			Screenshot.main(null);
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
      } 
});

Finde ich aber nicht sehr elegant :). Danke für den Tip Hobbit_Im_Blutrausch!

Ich würde es aber lieber so realisieren, wie es unser Gast im fünten Post vorgeschlagen hat. Funktoniert aber nicht :(.

Code:
import com.sun.image.codec.jpeg.JPEGCodec;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;

public class Screenshot
{
	public static void takeScreenshot(){ 
  
    Thread.sleep( 2000 );
    BufferedImage bi = new Robot().createScreenCapture(
    new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
    OutputStream  out  = new FileOutputStream( "D:/screenshot.jpg" );
    JPEGCodec.createJPEGEncoder( out ).encode( bi );
    out.close();
    ImageIO.write( bi, "jpg", new File("screenshot.jpg") );
    
  } 
}

Da ist alles ab "public static void takeScreenshot(){" rot :(.
Habe ich ne Klammer vergessen?

Danke

mfg
Slive
 

The_S

Top Contributor
Ne, aber du fängst ne Exception nicht. Thread.sleep wirft uU. eine InterruptedException und Robot#createScreenCapture eine AWT-Exception.
 

Slive

Mitglied
Hallo Hobbit_Im_Blutrausch,

danke, aber ich verstehe lieder kein Wort :oops:.
Hast du villeicht "Code" für mich?

"Ich brauche mehr Input"! :wink:

Grüße
Slive
 

The_S

Top Contributor
Code:
public class Screenshot
{
   public static void takeScreenshot(){
 
try {
    Thread.sleep( 2000 );
    BufferedImage bi = new Robot().createScreenCapture(
    new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
    OutputStream  out  = new FileOutputStream( "D:/screenshot.jpg" );
    JPEGCodec.createJPEGEncoder( out ).encode( bi );
    out.close();
    ImageIO.write( bi, "jpg", new File("screenshot.jpg") );
   }
catch (InterruptedException e) {
    e.printStackTrace();
}
catch (IOException e) {
   e.printStackTrace();
}
catch (AWTException e) {
   e.printStackTrace();
}
  }
}
 

Slive

Mitglied
Hobbit_Im_Blutrausch du bist mein persönlicher Held! :wink: Funktioniert wunderbar!

Code:
import com.sun.image.codec.jpeg.JPEGCodec;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;

public class Screenshot
{
   public static void takeScreenshot(){

try {
    Thread.sleep( 2000 );
    BufferedImage bi = new Robot().createScreenCapture(
    new Rectangle(800, 600) );
    OutputStream  out  = new FileOutputStream( "D:/Users/Frank-D/Eigene Dateien/workspace/Delaunay/screenshot.jpg" );
    JPEGCodec.createJPEGEncoder( out ).encode( bi );
    out.close();
    ImageIO.write( bi, "jpg", new File("screenshot.jpg") );
   }
catch (InterruptedException e) {
    e.printStackTrace();
}
catch (IOException e) {
   e.printStackTrace();
}
catch (AWTException e) {
   e.printStackTrace();
}
  }
}
Wenn du mir noch zeigen könntest, wie ich "Rectangle(800, 600)" auch an eine bestimmte Location bringen kann und wie ich die Komprimiereungrate des Bildes beeinflussen kann, dann ..... wäre mein Tag wirklich geretet!

Grüße
Slive :D
 

The_S

Top Contributor
Du kannst bei Rectangle auch noch eine Position angeben und nicht nur eine Größe ;) . Speicher es doch einfach als png. Da haste verlustfreie kompression und manchmal ist die sogar besser als die von jpg. BTW brauchst du so oder so den JPEGCodec bzw. JPEGEncoder nicht.
 

Slive

Mitglied
Jeha!! Mit euch mach Java ja richtig Spass!! :D

Ich werde mich jetzt mal mit
Code:
Toolkit.getDefaultToolkit().getScreenSize()
beschäftigen und schauen ob ich mein Frame automatisch in die Bildschirmmitte setzten kann. Und somit auf jedem Dektop ein Screeny an der richtigen Location machen kann.

Bis Bald :)

Grüße
Slive
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
C Int an andere Klasse übergeben Java Basics - Anfänger-Themen 26
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
S ArrayList in andere Klasse übernhemen Java Basics - Anfänger-Themen 5
Y Java andere Klasse aufrufen Java Basics - Anfänger-Themen 6
J Combobox füllen mit Wertausgabe von andere Klasse Java Basics - Anfänger-Themen 3
E Methode soll andere Methode der selben Klasse aufrufen Java Basics - Anfänger-Themen 28
G JTextField per Button speichern und an andere Klasse übergeben Java Basics - Anfänger-Themen 2
R Weitergabe von Arrays aus Methoden in andere Klasse Java Basics - Anfänger-Themen 5
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
F OOP Instanz einer Klasse an eine andere weitergeben Java Basics - Anfänger-Themen 16
S verweis auf andere Klasse fehler Java Basics - Anfänger-Themen 3
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
J Best Practice Auf DefaultTableModel in andere Klasse zugreifen Java Basics - Anfänger-Themen 4
J Werte an eine andere Klasse übergeben Java Basics - Anfänger-Themen 4
P auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 12
L Variable an andere Klasse weitergeben - Was mache ich falsch? Java Basics - Anfänger-Themen 2
O Übergabe in eine andere Klasse Java Basics - Anfänger-Themen 3
W Wert an andere Klasse übergeben Java Basics - Anfänger-Themen 8
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
T Array in andere Klasse verwenden Java Basics - Anfänger-Themen 3
W Variable an andere Klasse übergeben Java Basics - Anfänger-Themen 3
J JComboBox in andere Klasse Java Basics - Anfänger-Themen 2
U Inhalt von JTextfield an andere Klasse weitergeben Java Basics - Anfänger-Themen 13
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
M Variablen übergeben an andere Klasse Java Basics - Anfänger-Themen 9
O Variabeln aus einer andere Klasse dauerhaft einen anderen Wert übergeben Java Basics - Anfänger-Themen 5
O Methode in andere Klasse verlegt, "auslesen" einer HTML Seite verschnellert - Problem. Java Basics - Anfänger-Themen 4
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
P Eingabe aus JTextField/Area an eine andere Klasse übergeben. Java Basics - Anfänger-Themen 2
B Methode in andere Klasse verschieben Java Basics - Anfänger-Themen 9
N Klassen auf den Action Listener in einer andere Klasse zugreifen Java Basics - Anfänger-Themen 6
W objektorientierte Programmierung - String in andere Klasse übergeben Java Basics - Anfänger-Themen 13
D Methoden Methode über andere Klasse aufrufen Java Basics - Anfänger-Themen 7
H Wie while Schleife in andere Klasse verlagern? Java Basics - Anfänger-Themen 11
B Variablenübergabe an andere Klasse, Ausgabe Java Basics - Anfänger-Themen 3
W Übergabe Stringzeilen von serieller Schnittstelle in andere Klasse Java Basics - Anfänger-Themen 3
E Wert in eine andere Klasse übergeben Java Basics - Anfänger-Themen 3
B Übergabe Dateiname (String) an andere Klasse Java Basics - Anfänger-Themen 4
K Klasse für andere Klassen sichtbar machen Java Basics - Anfänger-Themen 6
J Combobox in andere Klasse übergeben Java Basics - Anfänger-Themen 3
H JPanel in andere Klasse übergeben Java Basics - Anfänger-Themen 7
B Wert einer String Variable an andere String Variable in anderer Klasse uebergeben Java Basics - Anfänger-Themen 5
A übergabe wert in andere klasse Java Basics - Anfänger-Themen 8
H ArrayList in andere Klasse übergeben Java Basics - Anfänger-Themen 6
E Variable aus einer Methode heraus in eine andere Klasse übergeben Java Basics - Anfänger-Themen 13
S OOP kann ich von einer Klasse aus auf andere Objekte zugreifen? Java Basics - Anfänger-Themen 7
J OOP Zugriff einer Klasse auf eine Andere Java Basics - Anfänger-Themen 8
R Variable an andere Klasse übergeben? Java Basics - Anfänger-Themen 3
K Im Jar andere Klasse starten Java Basics - Anfänger-Themen 8
F wie auf eine andere Klasse zugreifen? Java Basics - Anfänger-Themen 2
D Args in andere Klasse transferieren Java Basics - Anfänger-Themen 2
D Wie neue Instanz einer Klasse erstellen, von der ich nur eine andere Instanz kenne? Java Basics - Anfänger-Themen 13
G arraylist in andere klasse übernehmen Java Basics - Anfänger-Themen 2
L Wert an andere Klasse übergeben Java Basics - Anfänger-Themen 7
L SQL Query an andere Klasse übergeben Java Basics - Anfänger-Themen 3
M Probleme beim Objekzugriff auf andere Klasse: NullPointerExc Java Basics - Anfänger-Themen 5
M Parameter an andere Klasse übergeben? Java Basics - Anfänger-Themen 5
S auslagern von Methoden in andere Klasse Java Basics - Anfänger-Themen 4
J Zugriff auf ein Array über eine andere Klasse Java Basics - Anfänger-Themen 7
A Konstruktorübergabe von einer klasse an eine andere Java Basics - Anfänger-Themen 2
A Per ActionListener auf andere klasse zugreifen Java Basics - Anfänger-Themen 13
G Java Klasse durch eine andere Java Klasse starten? Java Basics - Anfänger-Themen 13
J Variable in andere Klasse übernehmen Java Basics - Anfänger-Themen 4
G JFrame aus andere Klasse in GUI anzeigen und bearbeiten Java Basics - Anfänger-Themen 3
M Methode einer Klasse in eine andere Übergeben Java Basics - Anfänger-Themen 4
T Methoden für GUI in eine andere Klasse Java Basics - Anfänger-Themen 2
H String aus einer Klasse in die andere ! Java Basics - Anfänger-Themen 9
S Variablenwert von einer Klasse in eine andere Klasse geben Java Basics - Anfänger-Themen 2
M Objektübergabe an andere Klasse Java Basics - Anfänger-Themen 5
J Parameter mit andere Klasse übergeben Java Basics - Anfänger-Themen 2
C Wert in andere Klasse übergeben Java Basics - Anfänger-Themen 10
J String von einer an die andere Klasse übergeben? Java Basics - Anfänger-Themen 11
N Daten von einer Klasse an eine andere übergeben? Java Basics - Anfänger-Themen 4
F ActionListener und Werteübergabe an andere Klasse Java Basics - Anfänger-Themen 3
V Array in andere Klasse laden Java Basics - Anfänger-Themen 12
W übergabe des aktuellen wertes in andere Klasse Java Basics - Anfänger-Themen 3
H JLabel aus einer Klasse an eine andere Klasse übergeben Java Basics - Anfänger-Themen 4
S Werte an andere Klasse übergeben Java Basics - Anfänger-Themen 3
C Object in andere Klasse umwandeln... Java Basics - Anfänger-Themen 3
G variablen in eine andre klasse übergeben (andere Datei) Java Basics - Anfänger-Themen 1
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
A Selbe Aufgaben stellung, andere Lösung Java Basics - Anfänger-Themen 7
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
B Mit webservice a) String auf Webseite ausgeben b) Weiterleitung auf andere Seite Java Basics - Anfänger-Themen 10
J Übergabe von Parametern an andere Methoden Java Basics - Anfänger-Themen 5
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben