PDA

Visualizza la versione completa : [JAVA] Mouse Listener & JInternalFrame


Mickel
11-02-2004, 14:46
Salve a tutti,
il mio problema il seguente:
ho creato un JPanel che ha un MouseListener e un MouseMotionListener e fin qui tutto bene. Poi quando il mouse clicca su di un oggetto all'interno di questo jpanel si dovrebbe aprire un JInternalFrame.
Qualcuno mi puo' dire come fare? Ho provato ad adattare ci che ho letto nei tutorial di Sun ma mi succede che mi si apre il JInternalFrame a coprire tutti il JPanel e non c' modo di ridimensionarlo, o spostarlo. Ho provato a disattivare i listeners del mouse (entrambi) ma non funziona ancora.
Qualcuno a qualche suggerimento su dove aggiungere questo JInternalFrame? Sul desktop o sul JPanel o dove? Grazie

LeleFT
11-02-2004, 14:48
Posta un po' di codice... non ho capito dove stia il problema.



Ciao. :ciauz:

Mickel
12-02-2004, 13:03
questa la classe dell'area in cui vengono disegnati gli oggetti.
se clicco su di essa si seleziona un punto..modificando il valore di una variabile. Poi se premo "invio" si deve aprire un JInternalFrame

class DrawingArea extends JPanel implements MouseMotionListener {
..
public DrawingArea() {

addMouseMotionListener(this);
nodeRay = new double[2];
formatter.setMaximumFractionDigits(4);
formatter.setMinimumFractionDigits(4);
formatter.setMaximumIntegerDigits(7);
formatter.setMinimumIntegerDigits(7);



addMouseListener(new MouseHandler());

KeyHandler listenerKey = new KeyHandler();
addKeyListener(listenerKey);
...

//La classe ha un metodo mouseMoved che modifica dei testi
//su di un altro jpanel

public void mouseMoved(MouseEvent e) {

Interfaccia.xCoordG.setText(" " + formatter.format
((e.getX()
+traslX*scalaX)/scalaX));
Interfaccia.yCoordG.setText(" " + formatter.format(fixY
(e.getY()/scalaY-traslY)));

}

//C' anche un metodo PaintComponent
public void paintComponent(Graphics g) {


//il metodo che dovrebbe far aprire il JInternalFrame

private class KeyHandler implements KeyListener {


public void keyPressed(KeyEvent event) {
removeMML();
int keyCode = event.getKeyCode();
if ((keyCode==KeyEvent.VK_ENTER) && (NODE_SELECTED!=0)) {

JInternalFrame myframe = new JInternalFrame("US",true);
desktop.add(myframe);
myframe.setLocation(20, 20);
myframe.setSize(100, 100);
myframe.setVisible(true);

}

}
public void keyReleased(KeyEvent event) {}
public void keyTyped(KeyEvent event) {}
}

Il problema che si apre un JInternalFrame che ricopre totalmente
il JPanel DrawingArea e non possibile spostarlo, ridimensionarlo o altro.

LeleFT
12-02-2004, 13:08
Prova ad aggiungere al costruttore del tuo JPanel questa riga:


setLayout(null);


Ciao. :ciauz:

Mickel
13-02-2004, 16:57
ciao!
grazie per il suggerimento. Ora il JInternalFrame si apre e le dimensioni sono corrette e anche la posizione che gli ho dato. Se provo a spostarlo pero' scompare... come se il JPanel sottostante (quello che contiene il JInternalFrame) venga ridisegnato e il JInternalFrame scompare al di sotto di esso. Cosa posso fare?

Ho provato a creare un metodo del JPanel che contiene il JInternalFrame che ha il compito di crare il JInternalFrame:

private void addJp() {
setLayout(null);
desktop = new JDesktopPane();
JInternalFrame myframe = new JInternalFrame("US");
myframe.setLocation(20, 20);
myframe.setSize(200, 200);
myframe.setVisible(true);

desktop.add(myframe);
setContentPane(desktop);

}
ma in questo modo Lo schermo diviene di colore blu e il JInternalFrame appare correttamente e si puo' spostare..funziona bene, pero' tutto quello che era sotto scomparso, forse perch ho cambiato il contentpane.

Grazie per ulteriori aiuto :)

bye

Loading