JWindow+JPopup

Busi

Mitglied
Warum geht dieser Code unter Suse Linux, und nicht unter Windows? Und was kann ich tun das es unter beiden BS läuft?
Code:
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JWindow;
public class Main
{
    public JWindow jw = new JWindow();
    public JPopupMenu pm = new JPopupMenu();
    public Main() 
    {
        jw.setSize(300,300);
        JMenu m = new JMenu("test");
        JMenuItem eins = new JMenuItem("Eins");
        JMenuItem zwei = new JMenuItem("Zwei");
        JMenuItem drei = new JMenuItem("Drei");
        m.add(eins);
        m.add(zwei);
        m.add(drei);
        pm.add(m);
        jw.getContentPane().addMouseListener(new MouseListener(){
            public void mouseClicked(MouseEvent e) {
            }

            public void mousePressed(MouseEvent e) {
                System.out.println("sdf");
                pm.show(jw,e.getX(),e.getY());
            }

            public void mouseReleased(MouseEvent e) {
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }
            
        });
        jw.setVisible(true);
    }
    public static void main(String[] args) 
    {
        new Main();
    }
}
 
Also bei mir funktioniert das wie gewollt unter Windows. Aber mach doch mal aus dem JWindow ein JFrame. Dann bekommst Du auch ein ordentliches Fenster mit Kreuz zum Schließen und so.
 
Das JWindow ist beabsichtigt da ich keinen Fensterramen für das Projekt gebrauchen kann.

Und mit einem JFrame geht das auch, aber wie gesagt, kann ich nicht gebrauchen.

Es ist Komisch das das geht, denn wir haben es an mehreren Rechnern Probiert.
 
Also ich benutze WinXP und das neueste Java-RE/SDK (gestern erst geupdated). Mit JWindow erscheint bei mir ganz oben links auf dem Desktop ein schlichtes 300x300 Rechteck, das auf den Klick wie gewünscht reagiert.

Hast Du schon probiert, die Position des Fensters zu ändern (setLocation())? Vielleicht erscheint es bei Dir nur "irgendwo".

Ansonsten kommt mir die Art des Aufrufs von setVisible() etwas verdächtig vor. Versuch doch mal den Code so zu schreiben, dass Du das nicht in dem Konstruktor erledigen musst. Wer weiss was da schon alles initialisiert ist und was nicht.
 
Er zeigt also das JPopupMenu an? Sehr interessant.

Auf allen Rechnern ist JDK6.0 also kann es daran nicht liegen. Und bei dir geht es auch. Dann weiß ich auch nicht mehr weiter.

Und warum geht es als JFrame, als JWindow aber nicht?

Wenn noch wer eine Idee hat, ich bin offen. Wenn nicht dann werde ich das Projekt so wie es angedacht war wohl beerdigen.
 
Also bei mir zeigt er das PopUp-Menu mit JWindow nicht an, mit JFrame aber schon. Also nimm einfach JFrame und setzt setUndecorated(true).

Java:
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JFrame;
public class Main
{
    public JFrame jf = new JFrame();
    public JPopupMenu pm = new JPopupMenu();
    public Main()
    {
        jf.setUndecorated(true);
        jf.setSize(300,300);
        JMenu m = new JMenu("test");
        JMenuItem eins = new JMenuItem("Eins");
        JMenuItem zwei = new JMenuItem("Zwei");
        JMenuItem drei = new JMenuItem("Drei");
        m.add(eins);
        m.add(zwei);
        m.add(drei);
        pm.add(m);
        jf.getContentPane().addMouseListener(new MouseListener(){
            public void mouseClicked(MouseEvent e) {
            }

            public void mousePressed(MouseEvent e) {
                System.out.println("sdf");
                pm.show(jf,e.getX(),e.getY());
            }

            public void mouseReleased(MouseEvent e) {
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }

        });
        jf.setVisible(true);
    }
    public static void main(String[] args)
    {
        new Main();
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück