Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di dyd87
    Registrato dal
    Mar 2007
    Messaggi
    64

    Menubar che "scompare"...

    Salve ragazzi

    Ho un problema: la menubar del mio jframe scompare sotto il Panel , quando aperta.
    Vi lascio il codice:

    codice:
    //Importazione delle librerie
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.border.TitledBorder;
    import java.awt.BorderLayout;
    
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridLayout;
    import java.awt.Image;
    import java.awt.MediaTracker;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.image.BandCombineOp;
    import java.awt.image.BufferedImage;
    import java.awt.image.Raster;
    import java.awt.image.WritableRaster;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.border.TitledBorder;
    
    //Dichiarazione della classe
    public class MainFrame extends JFrame
    {
        //Definizione degli attributi
    	JMenuBar bar;
    	JMenu file;
    	JMenu isto;
    
    	//item del menu file
    	JMenuItem fileApri;
    	JMenuItem fileEsci;
    	//item del menu isto
    	JMenuItem istoNormale;
    	JMenuItem istoCumulativo;
    
    	JButton rgb;
    	JButton seppia;
    	JButton negativo;
    	JButton balloon;
    	JButton sharpen;
    	JButton scala;
    	JButton right;
    
    	//bottoni
    	JButton buttonIsto;
    	JButton buttonIsto2;
    
    	
    	PanelImage imgPanel;
    	PanelImage imgPanel2;
    	
    	PanelHistogram histPanel;
    	PanelHistogram histPanel2;
    
    	//Definizione del costruttore
    	public MainFrame()
    	{
    
    
    
    		
    	this.setTitle("Filtro Immagini");
        	
        	this.bar = new JMenuBar();
        	this.file = new JMenu("File");
        	this.isto = new JMenu("Istogramma");
        	this.fileApri = new JMenuItem("Apri");
        	this.fileEsci = new JMenuItem("Esci");
        	this.istoNormale = new JMenuItem("Tradizionale");
        	this.istoCumulativo = new JMenuItem("Cumulativo");
    
    
    
    
        	
    
        	
        	this.bar.add(this.file);
        	this.bar.add(this.isto);
    
        	
        	this.setJMenuBar(this.bar);
    
        
        	this.imgPanel = new PanelImage();
        	
        	
        	this.histPanel = new PanelHistogram();
        	
        	
        	this.imgPanel2 = new PanelImage();
           
     
        	this.histPanel2 = new PanelHistogram();
            
        	
    
    
        	
    	GridBagConstraints lim = new GridBagConstraints();
    	pane.setLayout(layout);*/
    
    		
    
    
    	    this.imgPanel.setPreferredSize(new Dimension(320,320));
    
    	    this.histPanel.setPreferredSize(new Dimension(320,320));
    
    	    this.buttonIsto = new JButton("Istogramma Originale");
    
    	    JPanel left = new JPanel(new BorderLayout(8,8));
    
    	    left.add(imgPanel, BorderLayout.NORTH);
        	left.add(buttonIsto, BorderLayout.CENTER);
        	left.add(histPanel, BorderLayout.SOUTH);
    
        	this.imgPanel2.setPreferredSize(new Dimension(320,320));
    
    	    this.histPanel2.setPreferredSize(new Dimension(320,320));
    
    	    this.buttonIsto2 = new JButton("Istogramma Modificata");
    
    	    JPanel right = new JPanel(new BorderLayout(8,8));
    
    	    right.add(imgPanel2, BorderLayout.NORTH);
        	right.add(buttonIsto2, BorderLayout.CENTER);
        	right.add(histPanel2, BorderLayout.SOUTH);
    
    	    JPanel center = new JPanel(new GridLayout(1, 2, 8, 8));
    	    JPanel bottom = new JPanel(new FlowLayout(FlowLayout.CENTER));
    
    	    this.rgb = new JButton("Filtro RGB");
    	    bottom.add(rgb);
        	this.scala = new JButton("Filtro Scala di Grigi");
        	bottom.add(scala);
        	this.sharpen = new JButton("Filtro Sharpen");
        	bottom.add(sharpen);
        	this.negativo = new JButton("Filtro Negativo");
        	bottom.add(negativo);
        	this.seppia = new JButton("Filtro Seppia");
        	bottom.add(seppia);
        	this.balloon = new JButton("Filtro Balloon");
        	bottom.add(balloon);
        	this.right = new JButton("Filtro Right");
    
    	    center.add(left);
    	    center.add(right);
    
    	    JPanel centerWrapper = new JPanel(new FlowLayout());
    	    centerWrapper.add(center);
    
    
    	    this.add(centerWrapper, BorderLayout.CENTER);
    	    this.add(bottom, BorderLayout.SOUTH);
    	    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    	    
    	    this.setVisible(true);
    
        	//creo un ascoltatore e lo associo agli oggetti
        	FrameListener listener = new FrameListener(this);
        	this.addWindowListener(listener);
        	this.fileApri.addActionListener(listener);
        	this.fileEsci.addActionListener(listener);
        	this.istoNormale.addActionListener(listener);
        	this.istoCumulativo.addActionListener(listener);
        	this.buttonIsto.addActionListener(listener);
        	this.buttonIsto2.addActionListener(listener);
    
        	this.rgb.addActionListener(listener);
        	this.scala.addActionListener(listener);
        	this.sharpen.addActionListener(listener);
        	this.negativo.addActionListener(listener);
        	this.seppia.addActionListener(listener);
        	this.balloon.addActionListener(listener);
        	this.right.addActionListener(listener);
    
    
    		JPopupMenu.setDefaultLightWeightPopupEnabled(false);
    
    		this.setExtendedState(JFrame.MAXIMIZED_BOTH);
    	}
        //Definizione del metodo main
        public static void main(String args[])
        {
        	javax.swing.SwingUtilities.invokeLater(new Runnable()
        	{
        		public void run()
        		{
    
    		    	MainFrame frame = new MainFrame();
    
    		    	//rendo visibile il mio frame
    		    	//frame.setVisible(true);
        		}
    	    });
        }
    }
    In altro loco mi hanno suggerito che , probabilmente , stavo mescolando componenti "lightweigth" tipici di Swing (il JPopupMenu che compare quando clicco su un menu) con componenti "heavywheight" tipici di AWT.

    Soluzione:

    codice:
    JPopupMenu.setDefaultLightWeightPopupEnabled(false);
    Purtroppo non funziona.

    Altre idee?

    Grazie

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

    Re: Menubar che "scompare"...

    Originariamente inviato da dyd87
    In altro loco mi hanno suggerito che , probabilmente , stavo mescolando componenti "lightweigth" tipici di Swing (il JPopupMenu che compare quando clicco su un menu) con componenti "heavywheight" tipici di AWT.
    Ed è di certo questo il motivo.

    Originariamente inviato da dyd87
    Soluzione:

    codice:
    JPopupMenu.setDefaultLightWeightPopupEnabled(false);
    Purtroppo non funziona.
    Perché hai usato il setDefaultLightWeightPopupEnabled che è "statico" e influisce su tutti i JPopupMenu istanziati successivamente. Ma tu setDefaultLightWeightPopupEnabled l'hai fatto per ultimo.

    Quindi dovresti farlo prima di creare il menù.
    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 L'avatar di dyd87
    Registrato dal
    Mar 2007
    Messaggi
    64
    Grazie innanzitutto per la risposta

    Ho riprovato , mettendolo all'inizio prima dei Menu , poi prima di instanziare il frame e poi addirittura come prima istruzione della Main: nulla.


  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dyd87
    Ho riprovato , mettendolo all'inizio prima dei Menu , poi prima di instanziare il frame e poi addirittura come prima istruzione della Main: nulla.
    Chiariamo definitivamente: la questione della "sovrapposizione" di componenti heavyweight sui lightweight esiste (è pure documentata) ma a partire da Java 6 Update 12 è stata in gran parte corretta in automatico e senza dover cambiare nulla nel codice.

    C'è un bel documento online:
    Mixing Heavyweight and Lightweight Components

    Comunque quello che noto osservando meglio il tuo codice è che hai aggiunto i JMenu al JMenuBar ma non hai aggiunto i JMenuItem ai JMenu!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.