Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / November 2006

Tip: Looking for answers? Try searching our database.

JMenu and JTabbedPane conflict

Thread view: 
DenKain - 08 Nov 2006 02:44 GMT
Okay I know this should be very simple but my compiler, jGRASP, is not
making it so. The problem I have is that the compiler says the
following:

TabbedPaneDemo.java:131: cannot resolve symbol
symbol  : method createMenuBar ()
location: class javax.swing.JComponent
         frame.setJMenuBar(newContentPane.createMenuBar());

Now to be honest I really don't see what its not getting so I thought I
would get a second opinion.

Below is the code for my program so far (Yes I'm moding a demo for my
own use):

import java.awt.*;
import java.awt.event.*;
import javax.swing.JTabbedPane;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
//Specific AWTs that your calling
//import java.awt.BorderLayout;
//import java.awt.Dimension;
//import java.awt.GridLayout;
//import java.awt.event.KeyEvent;

public class TabbedPaneDemo extends JPanel {

public JMenuBar createMenuBar()
    {
       JMenuBar menuBar;
       JMenu menu, submenu;
       JMenuItem menuItem;

       //Create the menu bar.
       menuBar = new JMenuBar();

       //Build the first menu.
       menu = new JMenu("File");
       menuBar.add(menu);

       //a group of JMenuItems
       menuItem = new JMenuItem("Open");
       menu.add(menuItem);

       //a submenu
       menu.addSeparator();
       submenu = new JMenu("A submenu");

       menuItem = new JMenuItem("An item in the submenu");
       submenu.add(menuItem);

       menuItem = new JMenuItem("Another item");
       submenu.add(menuItem);
       menu.add(submenu);

       return menuBar;
   }

   public TabbedPaneDemo() {
       super(new GridLayout(1, 1));

       JTabbedPane tabbedPane = new JTabbedPane();
       ImageIcon icon = createImageIcon("middle.gif");

       JComponent panel1 = makeTextPanel("Panel #1");
       tabbedPane.addTab("Tab 1", icon, panel1,
                         "Does nothing");
       tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

       JComponent panel2 = makeTextPanel("Panel #2");
       tabbedPane.addTab("Tab 2", icon, panel2,
                         "Does twice as much nothing");
       tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

       JComponent panel3 = makeTextPanel("Panel #3");
       tabbedPane.addTab("Tab 3", icon, panel3,
                         "Still does nothing");
       tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);

       JComponent panel4 = makeTextPanel(
               "Panel #4 (has a preferred size of 410 x 50).");
    panel4.setPreferredSize(new Dimension(410, 50));
       tabbedPane.addTab("Tab 4", icon, panel4,
                         "Does nothing at all");
       tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);

       //Add the tabbed pane to this panel.
       add(tabbedPane);

       //Uncomment the following line to use scrolling tabs.
       //tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
   }

   protected JComponent makeTextPanel(String text)
    {
       JPanel panel = new JPanel(false);
       JLabel filler = new JLabel(text);
       filler.setHorizontalAlignment(JLabel.CENTER);
       panel.setLayout(new GridLayout(1, 1));
       panel.add(filler);
       return panel;
   }

   /** Returns an ImageIcon, or null if the path was invalid. */
   protected static ImageIcon createImageIcon(String path)
    {
       java.net.URL imgURL = TabbedPaneDemo.class.getResource(path);
       if (imgURL != null) {
           return new ImageIcon(imgURL);
       } else {
           System.err.println("Couldn't find file: " + path);
           return null;
       }
   }

   /**
    * Create the GUI and show it.  For thread safety,
    * this method should be invoked from the
    * event-dispatching thread.
    */
   private static void createAndShowGUI() {
       //Create and set up the window.
       JFrame frame = new JFrame("TabbedPaneDemo");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       //Create and set up the content pane.
       JComponent newContentPane = new TabbedPaneDemo();
         frame.setJMenuBar(newContentPane.createMenuBar());
       newContentPane.setOpaque(true); //content panes must be opaque
       frame.getContentPane().add(new TabbedPaneDemo(),
                                BorderLayout.CENTER);

       //Display the window.
       frame.pack();
       frame.setVisible(true);
   }

   public static void main(String[] args) {
       //Schedule a job for the event-dispatching thread:
       //creating and showing this application's GUI.
       javax.swing.SwingUtilities.invokeLater(new Runnable() {
           public void run() {
               createAndShowGUI();
           }
       });
   }
}
Lee Weiner - 08 Nov 2006 03:17 GMT
>Okay I know this should be very simple but my compiler, jGRASP, is not
>making it so. The problem I have is that the compiler says the
[quoted text clipped - 4 lines]
>location: class javax.swing.JComponent
>                  frame.setJMenuBar(newContentPane.createMenuBar());

>        //Create and set up the content pane.
>        JComponent newContentPane = new TabbedPaneDemo();
>                  frame.setJMenuBar(newContentPane.createMenuBar());
>        newContentPane.setOpaque(true); //content panes must be opaque
>        frame.getContentPane().add(new TabbedPaneDemo(),
>                                 BorderLayout.CENTER);

The compiler believes the newContentPane variable references a JComponent
object, and JComponents don't contain a createMenuBar method.  Remember,
the compiler doesn't actually put any objects in memory.  It takes its
best guess at what type of object is being referenced, and that's a
JComponent. When you use this type of "most generic variable declaration",
you're restricted to the methods contained in that class. If you declare the
variable of type TabbedPaneDemo, it works.

Lee Weiner
lee AT leeweiner DOT org
DenKain - 08 Nov 2006 18:58 GMT
I did tried that before setteling on what I thought was the best method
and I keep getting this error:

TabbedPaneDemo.java:124: non-static method createMenuBar() cannot be
referenced from a static context
                 frame.setJMenuBar(TabbedPaneDemo.createMenuBar());

> >Okay I know this should be very simple but my compiler, jGRASP, is not
> >making it so. The problem I have is that the compiler says the
[quoted text clipped - 22 lines]
> Lee Weiner
> lee AT leeweiner DOT org


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.