eneR: JPanel in JPanel - MouseEvents?`

Beitrag lesen

Hi,

Ich habe in einem JFrame ein JPanel, dass wie folgt "definiert" ist:
private FolderView leftPane = new FolderView();

Belegt leftPane die Fläche, von der Du glaubst, daß sie belegt wird?

Ja, da auf der betreffenden Fläche per g.drawXYZ() gezeichnet wird, und das auch sichtbar ist.

Aus Deinen Code-Schnipselchen ist das nicht erkennbar, da nicht dabei steht, welcher Layoutmanager im JFrame benutzt wird, welche Constraints ggf. für Dein leftView gelten usw.

Hier der Code, auf das Wesentliche reduziert:

_UI.java_

  
  
public class UI extends javax.swing.JFrame {  
  
  
    /** Creates new form UI */  
    public UI() {  
        initComponents();  
/** s.[i]Anmerkung. **/  
    }  
  
    private void initComponents() {  
  
        jPanel1 = new FolderView();  
  
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);  
        jPanel1.setLayout(jPanel1Layout);  
        jPanel1Layout.setHorizontalGroup(  
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGap(0, 540, Short.MAX_VALUE)  
        );  
        jPanel1Layout.setVerticalGroup(  
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addGap(0, 163, Short.MAX_VALUE)  
        );  
  
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());  
        getContentPane().setLayout(layout);  
        layout.setHorizontalGroup(  
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)  
        );  
        layout.setVerticalGroup(  
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)  
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)  
        );  
  
        pack();  
    }  
  
    // Variables declaration  
    private javax.swing.JPanel jPanel1;  
    // End of variables declaration  
  
}  
  

[i]Anmerkung. Ich habs jetzt ersteinmal so implementiert, aber das ist ja höchst unschön:

  
        jPanel1.addMouseListener(new MouseListener() {  
            public void mouseClicked(MouseEvent e) {  
                ((FolderView)jPanel1).mouseClicked(e);  
            }  
  
            public void mousePressed(MouseEvent e) {  
                ((FolderView)jPanel1).mousePressed(e);  
            }  
  
usw...  
        });

_FolderView.java_

  
public class FolderView extends javax.swing.JPanel implements java.awt.event.MouseListener {  
...  
  
    public FolderView() {  
...  
    }  
  
    @Override  
    public void paint(Graphics g) {  
      g.drawXYZ();  
...  
    }  
  
    public void mouseClicked(MouseEvent e) {  
        System.out.println("KLICK!:"+e.getX()+":"+e.getY());  
    }  
  
    public void mousePressed(MouseEvent e) {  
        System.out.println("Press:"+e.getX()+":"+e.getY());  
    }  
...  
}  

cu,
Andreas

Gruß,
eneR