Verbindung zweier Klasse

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,

ich habe zwei Klassen, die 1. Klasse ist ein JPanel (meine GUI) und die zweite Klasse ist die Klasse, welche eine ScreenShot vom Panel der 1. Klasse machen soll.
Mein Problem ist jetzt, ich weiß nicht genau wie ich das machen kann, dass die Klasse zum Screenshot machen völlig unabhängig von der JPanel- Klasse ist (der screenshot- Klasse soll eine Instenz der JPanel- Klasse übergeben werden und dann sollten die Screenshots gemacht werden können)
ich möchte die JPanel- Klasse nur mit der Screenshot-Klasse verbinden (Assoziation).
Der ScreenShot soll genau dann geamcht werden, wenn die rechte Maustaste am Panel gedrückt wird und der Menüpunkt (vom Popup- Menü) ausgewählt wurde.
Das alles möchte ich in der Klasse ScreenShot machen (screenshot schießen und auch der MausListener soll in der Screenshot- Klasse sein)
Das Panel ist nicht fix und es kann auch mehrere Panels geben, daher möchte ich das ganz getrennt machen, damit ich nur die einzelnen Panels bei der screenshot- Klasse anmelden brauch.

Bin für jeden Tipp und jede Anregung sehr dankbar!!

lg
Michl
 

JPKI

Top Contributor
Mit Singleton jeder neuen JPanel genau das selbe Objekt der Screenshot-Klasse machen.
Dann mittels java.awt.Robot#createScreenCapture(Rectangle) den Screenshot machen. Das Rectangle-Objekt enthält die absoluten Koordinaten der JPanel-Klasse (JPanel#getLocationOnScreen()).
 
S

SlaterB

Gast
wo gibts denn Probleme?
in der Screenshotklasse eben die Logik für das Popupmenü usw,
irgendwann muss es aber mal eine Registrierung geben,
bei der am JPanel das Menü und der Mauslistener registriert werden

z.B. screeni.prepare(jPanel)
 

MQue

Top Contributor
Hallo,

ich hab das mit dem Singleton noch nicht ganz. ich habe unten meine Klasse aufgelistet, mir ist aber nicht ganz klar, wie ich die untere Klasse mit meinen verschiedenen Panels verbinden kann. Auch weiß ich nicht genau, wie ich den Code in der unteren Klasse implementieren soll (die Panels bekommen ja ein Objekt (Instanz) der Klasse ScreenShot aber funktioniert dann auch das popup-Menue in der JPanel- Klasse?)
Vielleicht könnt mir da noch jemand ein paar Tipps geben.

Vielen herzlichen Dank!!

lg
Michl


Code:
public class ScreenShot extends PopupMenu implements ActionListener
    {  
    private static ScreenShot instance = null;
    private BufferedImage screenShot;
    private MenuItem mi; 
	
    public static ScreenShot getInstance()
	{
	if (instance == null)
	    instance = new ScreenShot();
	return instance;
	}
    
    private ScreenShot() 
	{
	/* Popup menue */
	mi = new MenuItem("Screenshot");
	mi.addActionListener(this);
	add(mi);
	
	/* Screenshot machen */
	try {
	    screenShot = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) ); 
	    ImageIO.write(screenShot, "jpg", new File("c:/screenshot.jpg")); 
	    }
	catch (Exception e) {}
	}   
    public void actionPerformed(ActionEvent evt)
	{
	}
    }
 
S

SlaterB

Gast
tja, also ich bin der Meinung,
dass du pro JPanel ein eigenes Menü + Listener usw. brauchst
(vielleicht ist der Listener im Menü schon drin, kenne ich nicht)

bei dem Menüpunkt dann Screenshot aufrufen, ob Singleton, statische Operation oder eigenes Objekt ist da erstmal nebensächtlich,
solange es geht

wie gesagt: den Code zur Erstellung des Menüs/ Listener kann in einer Operation, diese dann einfach aufrufen:

screeni.prepare(jPanel) // Screeni auch wieder ein Singleton/ statisch/ neues Objekt/ erstmal egal

wo ist das Problem?
 

MQue

Top Contributor
also ich mache mir in der Klasse ScreenShot (oben) eine Methode (statisch oder nicht) wo der Code für das Popup- Menü drinnensteht und rufe diese Methode von der Klasse mit dem JPanel auf.
Hab ich das so richtig verstanden?
Was schreib ich eigentlich in meine JPanel- Klasse?
Ich brauch ja dann 2 Methoden: 1. Ich rufe die Methode zum erzeugen des PopupMenüs von der JPanel- Klasse auf
2. ich rufe eine Methode in ScreenShot auf, welche mir den ScreenShot erstellt.

Ich möchte auch noch einen JFileChooser implementieren.

Vielen Dank für Eure Hilfe!!


lg
Michl
 
S

SlaterB

Gast
> Hab ich das so richtig verstanden?
so habe ich es gemeint, ja, obs funktioniert darst du herausfinden ;)

> Ich brauch ja dann 2 Methoden
> 1.

screeni.prepare(jPanel) bzw. screeni.prepare(this)

> 2.
steht im Listener bei dem Menüpunkt?
 

MQue

Top Contributor
SlaterB hat gesagt.:
screeni.prepare(jPanel) bzw. screeni.prepare(this)


was ist das screeni (meine ScreenShot- Klasse?) und was macht prepare(), diese Methode kann ich nirgends finden?


lg und vielen Dank
Michl
 
S

SlaterB

Gast
> also ich mache mir in der Klasse ScreenShot (oben)

screeni (oder irgeneine andere Klasse, mit egal)

> eine Methode (statisch oder nicht) wo der Code für das Popup- Menü drinnensteht

prepare()

> diese Methode kann ich nirgends finden?

die sollst du ja erst bauen ;)
 

MQue

Top Contributor
Also ich kappiers leider nicht ganz.
Ich habe unten meine 2 Klassen aufgelistet. Es funktioniert so wie ichs unten hab nur möchte ich die Methoden der Klasse Panel (processMouseEvent() und actionPerformed()) in der Klasse ScreenShot haben. Ich weiß nicht wie ich das anstellen kann.
Vielleicht könnte mir da jemand einsagen.

Vielen dank auf jeden Fall.

lg
verzweifelter Michl

Code:
Klasse Panel:
public class Panel1 extends javax.swing.JPanel implements ActionListener {
    private ScreenShot screenMenue;
    
    public Panel1() {
	screenMenue = new ScreenShot(this);
	this.add(screenMenue);
	enableEvents(AWTEvent.MOUSE_EVENT_MASK);
	
	}
   public void processMouseEvent(MouseEvent event)
	{
	if (event.isPopupTrigger())
	    {
	    screenMenue.show(event.getComponent(), event.getX(), event.getY()); 
	    }
	super.processMouseEvent(event);
	}
    
    public void actionPerformed(ActionEvent event)
	{
	System.out.println(event.getActionCommand());   // anstatt hier sollte actionPerformed in der Klasse Screenshot aktiv sein
	}
     
}


Klasse ScreenShot:

public class ScreenShot extends PopupMenu implements ActionListener
{
    public ScreenShot(ActionListener listener)
	{
	MenuItem mi;
	
	mi = new MenuItem("irgendwas");
	mi.addActionListener(listener);
	add(mi);
	
	addSeparator();
	
	mi = new MenuItem("Hilfe");
	mi.addActionListener(listener);
	add(mi);
	
	}
    
    public void actionPerformed(ActionEvent event)  //diese Methode soll anstatt der Methode in Panel1 aktiv sein
	{
	System.out.println("hallo" + event.getActionCommand());
	}
}
 
S

SlaterB

Gast
also
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
kenne ich gar nicht, wär ja doof, wenn man da im JPanel die Events verarbeiten muss,
dazu kann ich nix sagen,
vielleicht gehts auch mit normalen MouseListener:

Code:
public class ScreenPopUp extends PopupMenu implements ActionListener, MouseListener 
{ 
    public ScreenShot(JPanel p) 
   { 
      MenuItem mi; 
      // ... mi.addActionListener(this)
      
       p.add(menu);
       p.addMouseListener(this)   
   } 
    
   public void actionPerformed(ActionEvent event)  { 
       System.out.println("hallo" + event.getActionCommand()); 
       // Screener aufrufen, entweder statisch/singleton
       // oder normal (z.B. Referenz im Parameter übergeben)
   } 

   public void mausKlick() {
        show(event.getComponent(), event.getX(), event.getY()); 
   }

} 

--------


public class Screener() {
 

   public void prepare(JPanel p) {
      new ScreenPopup(p);
   }

  // ScreenShot-Operationen

}


--------

public class Panel1 extends JPanel  { 
    
    public Panel1() { 
         screener.prepare(this); // kein Listener, keine Exemplarvariable
         // nur eine Zeile, ein Aufruf
    }

}
 

MQue

Top Contributor
Hallo,

danke vielmals für deine Hilfe aber ich hab noch ein Problem: ich bekomme bei p.add(mi) einen Fehler und hab keine Ahnug wieso, vielleicht kannst du kurz drüberschaun ob du das so gemeint hast.

Vielen DANK!!!



Code:
public class ScreenPopUp extends PopupMenu implements ActionListener, MouseListener
{
    private MenuItem mi;
    private static MainPanelHMI p; 
    
    public ScreenPopUp(MainPanelHMI p)
	{
	this.p = p;
	mi = new MenuItem("screenShot");
	mi.addActionListener(this);     
	p.add(mi);                                      //hier bekomme ich eine Fehler -> cannot find symbol? keine Ahnung wieso
	p.addMouseListener(this);                //Methode add() steht auch noch dabei
	}
   
   public void actionPerformed(ActionEvent event)  
	{
       System.out.println("hallo" + event.getActionCommand());
       // Screener aufrufen, entweder statisch/singleton
       // oder normal (z.B. Referenz im Parameter übergeben)
	}
   
    public void mousePressed(MouseEvent evt)
	{
	show(evt.getComponent(), evt.getX(), evt.getY());  //hier bekomme ich immer eine NPE
	}
     
    public void mouseReleased(MouseEvent evt)
	{	
	}
    public void mouseExited(MouseEvent evt)
	{	
	}   
    public void mouseClicked(MouseEvent evt)
	{
	}
    public void mouseEntered(MouseEvent evt)
	{
	}
}


--------------
public class Screener 
{
   public void prepare(MainPanelHMI p) {
      new ScreenPopUp(p);
   }
} 
--------------
public class MainPanelHMI extends javax.swing.JPanel implements ActionListener  {
    
    private Screener screenMenue = new Screener();
    
    public MainPanelHMI() {
	initComponents();	
	
	screenMenue.prepare(this);
 
S

SlaterB

Gast
ja nun mal halblang, ich kann das nicht alles für dich programmieren,

also das Menü-Item natürlich nicht beim JPanel einfügen,
sondern im PopUpMenü,
hatte ich falsch von dir kopiert

und dann am Ende vielleicht p.setPopUpMenu(this),
was auch immer, musst du wissen,
ich hoffe, du hast schon mal ein ganz normales PopUpMenu hinbekommen ;)

-----

//hier bekomme ich immer eine NPE
vielleicht ist evt.getComponent() null,
weil das jetzt nicht mehr mit
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
zusammenhängt,
aber egal, du kennst ja die Komponente p, übergib dieses statt evt.getComponent()

> private Screener screenMenue = new Screener();

Screener ist nicht das Menü!

> private static MainPanelHMI p;

> public ScreenPopUp(MainPanelHMI p)
> {
> this.p = p;

ganz gefährliche Sache, wieso ist p statisch?
macht keinen Sinn
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Meeresgott Input/Output Java Socket Verbindung Allgemeine Java-Themen 1
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
D Socket Verbindung mit TLSv1 Allgemeine Java-Themen 1
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
Bluedaishi Input/Output Bluetooth Bondrucker MZ220 keine Verbindung Allgemeine Java-Themen 0
S runnable jar file in Verbindung mit itext Allgemeine Java-Themen 3
M Verbindung zu Webserver schlägt fehl Allgemeine Java-Themen 0
B Technikfrage bzgl Verbindung von Frontend und Backend Allgemeine Java-Themen 0
G genestete SSH-Verbindung Allgemeine Java-Themen 4
B Webbrowser mit Proxy- Verbindung starten Allgemeine Java-Themen 6
GUI-Programmer Java Mail - Proxy für Verbindung einstellen Allgemeine Java-Themen 2
D Socket Java Socket Verbindung Allgemeine Java-Themen 14
F Internet Verbindung verschlüsseln Allgemeine Java-Themen 17
F Verbindung mit einem UMTS-Stick herstellen um SMS zu empfangen Allgemeine Java-Themen 8
T Batch-File / keine Verbindung zur DerbyDB Allgemeine Java-Themen 3
B verbindung mit exchange server Allgemeine Java-Themen 3
MQue FTP Verbindung download Allgemeine Java-Themen 5
R Socket verbindung mit Timeout Allgemeine Java-Themen 2
M Hibernate frage zur Verbindung Allgemeine Java-Themen 3
G Serielle Verbindung zu einem Handy Allgemeine Java-Themen 3
E iBatis und wie oft wird eine Verbindung hergestellt Allgemeine Java-Themen 5
E ftp verbindung mit javacode Allgemeine Java-Themen 5
S svnkit Verbindung über https Anleitung Allgemeine Java-Themen 6
E Verbindung über TCP Allgemeine Java-Themen 3
P Verbindung überprüfen Allgemeine Java-Themen 5
E Thread Fragen in Verbindung mit Swing Allgemeine Java-Themen 4
G Verbindung zum Server Allgemeine Java-Themen 10
T Frage zu char in verbindung mit int Allgemeine Java-Themen 4
E Verbindung besteht/besteht nicht Allgemeine Java-Themen 5
MQue TCP- Verbindung Allgemeine Java-Themen 12
E TCPIP- Verbindung Allgemeine Java-Themen 3
T RDP Verbindung mit Java herstellen Allgemeine Java-Themen 4
H sichere Datenbank-Verbindung Allgemeine Java-Themen 4
F Socket - Server verbindung Allgemeine Java-Themen 12
M Probleme mit URLClassLoader in Verbindung mit rmi Allgemeine Java-Themen 6
K Runtime.exec und DFÜ-Verbindung Allgemeine Java-Themen 5
R ClassLoader funktioniert in Verbindung mit JAR-Datei nicht Allgemeine Java-Themen 8
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
B Kollision zweier Kugeln im R² Allgemeine Java-Themen 2
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
C Gemeinsame Oberklasse zweier Generics Allgemeine Java-Themen 10
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
T Parallelisierung zweier BigInteger-Funktionen Allgemeine Java-Themen 6
M Zugriff zweier Threads auf diesselbe Methode Allgemeine Java-Themen 16
I Vergleich zweier Felder Allgemeine Java-Themen 3
F Vergleich zweier Listen Allgemeine Java-Themen 4
R Objektsynchronisierung zweier Listen?!?! Allgemeine Java-Themen 2
data89 [Kurze Frage] Ähnlichkeit zweier Strings ermitteln Allgemeine Java-Themen 19
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
P gegenseitige Methodenaufrufe zweier Klassen Allgemeine Java-Themen 14
D Generalisierungsbeziehung zweier Klassen Allgemeine Java-Themen 5
D Seltsame Ausgabe beim zusammenführen zweier Dateien Allgemeine Java-Themen 14
J vergleich zweier datenstrukturen Allgemeine Java-Themen 6
Z Verknüpfung zweier Klassen! Allgemeine Java-Themen 2
N Vergleich zweier Hashtable / mehrere Enumerations Allgemeine Java-Themen 7
M run()-Code zweier Threads strikt abwechselnd ausführen Allgemeine Java-Themen 7
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
A Zweite Service Klasse beim Kompilieren Allgemeine Java-Themen 6
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
Atten007 Java-Klasse auf macOS entpacken? Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Kombination Interface und Abstrakte Klasse bei Generics Allgemeine Java-Themen 3
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
missy72 Klassen Eigene Klasse MessageWindow ähnlich der Alert Klasse Allgemeine Java-Themen 2
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
kanywayne Java programmieren: Polynom Klasse Allgemeine Java-Themen 4
L Die abzuleitende Klasse als Parameter übergeben Allgemeine Java-Themen 4
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
C Klasse mit Mockito simulieren Allgemeine Java-Themen 9
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
S static in Interface und Klasse Allgemeine Java-Themen 2
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
D javassist API Klasse in MethodCall ermitteln Allgemeine Java-Themen 8
kodela Klasse mit "gezipten" Daten Allgemeine Java-Themen 6
J Builder Klasse mit Lombok bauen Allgemeine Java-Themen 2
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
M [SOAP] - Klasse aus WSDL ausschließen Allgemeine Java-Themen 2
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
X Klassen Klasse BreakIterator Allgemeine Java-Themen 6
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
kodela Klassen Klasse "vergisst" ihre Daten Allgemeine Java-Themen 2
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
E Socket Dynamische Klasse von ObjectOutputStream lesen. Allgemeine Java-Themen 8
M Matcher-Klasse findet match nicht Allgemeine Java-Themen 6
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
S Seltsames Ergebnis mit Date-Klasse Allgemeine Java-Themen 6
J int Werte in einer anderen Klasse in Arrays speichern Allgemeine Java-Themen 3
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben