我是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);
}
}
答案 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
一些旁注: