我在使用Swing设计MDI应用程序时遇到了一些麻烦。
我可以轻松实现JDesktopPane& JInternalFrames,我的问题会更具体一些。这是我的基础容器框架一览:
package applicationGUI;
import javax.swing.JFrame;
public class DesktopContainer extends JFrame{
/* Fields */
/* Constructors */
public DesktopContainer(){
setContentPane(new Desktop());
setJMenuBar(AppllicationMenuBar.getMenuBar());
}
/* Public Methods */
public Desktop getDesktop(){
return (Desktop)getContentPane();
}
}
我的桌面:
public class Desktop extends JDesktopPane{}
请注意,我将桌面设置为DesktopContainer的内容窗格。我想要的是,能够在桌面上添加JPanels(特别是在JMenuBar下面)。不幸的是,我无法做到这一点。最后,这是我的问题:
1-)可以在JDesktopPane上绘制JPanel对象吗?我做了一些挖掘,我猜它与JLayeredPane功能有关,但不幸的是我无法实现它。
2-)如果无法在JDesktopPane上绘制JPanel对象,我怎样才能设法做我想要的任何建议?我只想到,“将两个JPanel添加到JFrame中,根据需要使用顶部的一个,并将JDesktopPane绘制到下面的第二个JPanel中”。这是一个好方法吗?
感谢您的回答..
答案 0 :(得分:6)
可以绘制JPanel并可以在JDesktopPane上接收事件
public class DesktopContainer extends JFrame {
/* Constructors */
public DesktopContainer(){
setContentPane(new Desktop());
setJMenuBar(createJMenuBar());
APanel a = new APanel();
a.setBounds(0, 0, 200, 200);
a.setVisible(true);
getDesktop().add(a);
}
....
}
class Desktop extends JDesktopPane {
}
class APanel extends JPanel {
public APanel() {
setLayout(new BorderLayout());
add(new JButton("Hello stackoverflow"));
}
}
工作正常。 您应该在JPanel上调用setVisible(true),setBounds()作为JInternalFrame required。