Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [JAVA] JInternal Frame

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    80

    [JAVA] JInternal Frame

    Ciao a tutti,
    ho scritto una classe astratta che estende JInternalFrame.
    codice:
    public abstract class MyInternalFrame extends JInternalFrame {
        final JPanel panel;
    
        public MyInternalFrame() {
            super("Internal Frame", true, true, true, true);
            setBounds(20, 20, 150, 100);
            setVisible(true);
            Dimension dim = new Dimension(300, 200);
            panel= new JPanel();
            panel.setLayout(new BorderLayout());
            setContentPane(panel);
            setPreferredSize(dim);
            setLocation(60, 30);
            setToolTipText("Internal Frame ");
    
        }
    
        public JPanel getPanel(){ return this.panel;}
    
    }
    Ho scritto una seconda classe che estende la prima

    codice:
    public abstract class MyInternalImage extends MyInternalFrame {
    
        private ImageIcon image;
        private JLabel label;
    
        public MyInternalImage(ImageIcon image) {
            super();
            this.image = image;
            this.label = new JLabel(image);
    
        }//MyInternalImage
    
        public ImageIcon getImageIcon() { return this.image; }
    
        public JLabel getLabel() { return this.label; }
    }
    In una terza classe istanzio MyInternalImage() e la aggiungo al JDesktopPane di questa classe.
    Il problema è che l'internal frame viene aperta ma non compare la label con l'image associata..
    non so come fare..

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] JInternal Frame

    Originariamente inviato da Marco_P
    In una terza classe istanzio MyInternalImage() e la aggiungo al JDesktopPane di questa classe.
    Il problema è che l'internal frame viene aperta ma non compare la label con l'image associata..
    non so come fare..
    A parte il fatto che fai operazioni inutili, come il setBounds in cui passi 20, 20 ma poi dopo tanto fai un setLocation di 60, 30.

    Comunque vedo che istanzi dei componenti ma poi non li aggiungi in un "container". Hai istanziato un JPanel ma non vedo alcuna add() per aggiungerlo in un contenitore. Idem hai istanziato un JLabel ma non vedo una add() per aggiungerlo da qualche parte.
    I componenti non vengono aggiunti per "magia" nella interfaccia grafica solo perché hai dichiarato delle variabili di istanza di quei componenti ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    80
    Ok fatto,
    nella terza classe ho questo metodo che fa l add della MyInternalImage
    codice:
    .....
        public void addInternalFrame() {
            ImageIcon image = new ImageIcon(pathfilenname);
            myiframe = new MyInternalImage(image){};
            popMenu = new PopUpMenu(this, myiframe.getImageIcon());
            scrollPane = new JScrollPane(popMenu);
            myiframe.getLabel().addMouseListener(new MousePopupListener());
            scrollPane.getViewport().add(myiframe.getLabel());
            myiframe.getPanel().add(scrollPane);
            myiframe.pack();
            desk.add(myiframe);
    
        }
    
    ...
    Ora l immagine si vede..

    Passo 2: Ho associato un mouselistener alla label, perche voglio far comparire un popup menu quando clicco sull immagine con il tasto desto..
    codice:
        class MousePopupListener extends MouseAdapter {
    
            public void mousePressed(MouseEvent e) {
                checkAction(e);
            }
    
            public void mouseClicked(MouseEvent e) {
                checkAction(e);
            }
    
            public void mouseReleased(MouseEvent e) {
                checkAction(e);
            }
    
            private void checkAction(MouseEvent e) {
                if (e.isPopupTrigger()) {
                    popMenu.getPopUp().show(label, e.getX(), e.getY());
                }
            }
        }
    Quando eseguo il tutto il popup menu appare ma non nella posizione dove clicco! Praticamente prende le coordinate corrette sulla label ma la show() la fa sulle coordinate del Desktop del mio pc..

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    80

    RISOLTO!

    bastava mettere
    codice:
    popMenu.getPopUp().show(e.getComponent(), e.getX(), e.getY());
    al posto di

    codice:
    popMenu.getPopUp().show(label, e.getX(), e.getY());

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.