我无法访问java中的对象

时间:2014-07-05 23:26:57

标签: java class jinternalframe

我是Java的新手,并且在摇摆方面存在一些问题。我想要一个应用程序,当用户通过菜单栏调用时,它有一些内部框架。

import java.awt.Color;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class uygulama {

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {

            JFrame frame = new JFrame("uygulama adı");  

            JDesktopPane desktop = new JDesktopPane();
            frame.add(desktop);

            menubar  mb = new menubar(); //Jmenubar inst.
            frame.setJMenuBar(mb);

            frame.setBounds(300,100,500,300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
            System.out.println(desktop.getTopLevelAncestor());

        }
    }); 
  }

}

在上面的代码中(监听器代码块);我无法访问桌面'宾语。如果可以,我会使用' desktop.add()'添加JInternalFrame。

import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;


public class menubar extends JMenuBar {

    JMenu Dosya;
    JMenuItem DosyaItem;

    menubar () {
        Dosya = new JMenu("Dosya");


        DosyaItem = new JMenuItem("Dosya1");
        DosyaItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //desktop. here is the problem
            System.out.println();
            }
        });
        Dosya.add(DosyaItem);
        add(Dosya);


    }

}

1 个答案:

答案 0 :(得分:1)

您可以将JDesktopPane传递给JMenuBar类:

        JDesktopPane desktop = new JDesktopPane();
        frame.add(desktop);

        menubar  mb = new menubar(desktop); // pass in the reference

然后在你的菜单栏课程中:

public class menubar extends JMenuBar {
    private JDesktopPane desktop;

    JMenu Dosya;
    JMenuItem DosyaItem;

    menubar (JDesktopPane desktop) {
        this.desktop = desktop;
        Dosya = new JMenu("Dosya");

这样菜单栏就可以参考显示的JDesktopPane


一些旁注:

  • 您将需要学习并遵守Java命名约定。类名应该都以大写字母开头,方法和变量名都以小写字母开头。遵循这一点,其他人将能够更好地遵循您的代码。
  • 我不确定为什么你的菜单栏类扩展了JMenuBar,因为它没有覆盖这个类的任何方法。
  • 您在主要方法启动的Runnable中有太多代码。您可能希望将大部分代码放在一个类中,并将其从静态领域中删除。