• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Tim Cooke
  • paul wheaton
  • Jeanne Boyarsky
  • Ron McLeod
Sheriffs:
  • Paul Clapham
  • Liutauras Vilda
  • Devaka Cooray
Saloon Keepers:
  • Tim Holloway
  • Roland Mueller
Bartenders:

Image is always behind the menu (swing)

 
Ranch Hand
Posts: 66
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I created a JFrame (swing) with an image, but the JMenu of the Frame is always behind the image.
Please help.
Thx Brain
 
Ranch Hand
Posts: 18944
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Try adding a canvas to the layout manager of your JFrame and then adding your image to the canvas. This will force the image to "play nice" with the menu bar in your frame and not try to hog all of the space.
Nick
 
Smilidon Sapiens
Ranch Hand
Posts: 66
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I tried this :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Try extends JFrame implements Runnable, ActionListener
{
Dimension d;
Toolkit tk = getToolkit();
PCanvas can = new PCanvas();
JPanel panel = new JPanel(new BorderLayout());

public Try(String title)
{
super(title);
d = tk.getScreenSize();
setBounds(d.width/2-300, d.height/2-300, 600, 600);
setResizable(false);
panel.add(new TextField("TEST"));
panel.add(can);
setContentPane(panel);
addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
setVisible(false);
dispose();
System.exit(0);
}
});



}

public void actionPerformed(ActionEvent e)
{

}

public void run()
{

}

public static void main(String[] args)
{
JFrame frame = new Try("Animation");
frame.show();
}

}

class PCanvas extends Canvas
{
public void paint(Graphics g)
{
g.setColor(Color.black);
g.drawLine(1,1,20,20);
}
}
But know the textfield will be hide.
Sorry, I'm a very beginner...
 
Anonymous
Ranch Hand
Posts: 18944
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Your code looks good, except that you haven't created and attached a JMenuBar object to the frame. You will have to create an instance of JMenuBar and add some JMenuBarItem's to it. Then call setJMenuBar() on your JFrame.
Nick
 
Anonymous
Ranch Hand
Posts: 18944
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I just compiled an example and I finally understood what you were saying. The problem is a result of mixing Lightweight (swing) components with heavyweight (awt) ones. If you are using JFrame and a JMenuBar together with a Canvas, you will see the JMenuBar pop up behind the Canvas. There are two ways to fix this. One way is to simply use a JPanel instead of a Canvas for your painting surface. It will work the same but is lightweight and won't cause this problem. The other way will only work for JPopupMenu objects, so for a JMenuBar, use the solution I just gave. For JPopupMenu objects there is a method called setDefaultLightWeightPopupEnabled() that will fix the problem.
Finally, I hope this helps. Sorry for my misunderstanding.
Nick
 
Whoever got anywhere by being normal? Just ask this exceptional tiny ad:
Smokeless wood heat with a rocket mass heater
https://woodheat.net
reply
    Bookmark Topic Watch Topic
  • New Topic