最初,右下角的空白区域是一个面板,它旨在绘制标本、位置和旅行路径的视觉表示(并不重要)。但是,您将能够打开某种类型的窗口,允许您创建/编辑不同的项目(如物种、位置和旅行路径)。最初我计划让这些只是弹出窗口。但是,我在想,我可能会使用弹出窗口和视觉表示屏幕的J内部窗格。
所以在我的JFrames构造函数中:
JDesktopPane pane = new JDesktopPane();
this.setContentPane(pane);
setLayout(new BorderLayout());//To layout the menubar, and the items on the left
panel = new GraphicsPanel(manager);
panel.setVisible(true);
在图形面板构造函数中:super(“图形项目视图”,真、假、真、真)
这会将面板锁定为BorderLayout。居中,它填满了整个空间,不允许其他任何东西。我猜这是因为JDesktopPanes使用OverlayLayout,当我将布局设置为覆盖OverlayLayout的BorderLayout时,我的内部框架就添加到中心。
所以问题是:我如何像现在这样布局JMenuBar和左病房面板,同时保持JinternalFrame的功能?
现在,我将通过JFrame.setJMenuBar(JMenuBar)而不是JFrame.add(menuBar,BorderLayout)添加JMenuBar。NORTH),然后将左侧的面板更改为J内部框架,但如果可能的话,我宁愿保持原样。我希望它,如果我可以有桌面窗格添加到JFrame在BorderLayout.CENTER,然后只需将框架添加到桌面窗格。如果InternalFrame仅限于该区域,我不会在意,只要它仍然是移动的,等等。
编辑:我如何添加JInternalFrame(抱歉,它仍然显示panel,但它已转换为JInternalFrame):
panel = new GraphicsPanel(manager);
panel.setSize(desktop.getSize());
panel.setLocation(0,0);
panel.setVisible(true);
desktop.add(panel);
我将从一个JPanel
开始(让它全部放在基本窗格中),它将容纳其他容器。
使用边框布局,我将在基本窗格的WEST
位置添加一个控件面板。在CENTER
位置上,我将添加JDesktopPane
。
我会将主窗口布局设置为BorderLayout
,并将基本窗格添加到其中。这将允许您使用JFrame#setJMenuBar
管理菜单栏,同时维护布局结果。
这将允许您包含在桌面上使用JInternalFrame
s,而不会影响其余的布局...
简单的例子
这是一个过于简化的例子,用于演示上述基本概念...
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class SimpleLayout {
public static void main(String[] args) {
new SimpleLayout();
}
public SimpleLayout() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JMenuBar mb = new JMenuBar();
mb.add(new JMenu("File"));
mb.add(new JMenu("Add"));
mb.add(new JMenu("Edit"));
mb.add(new JMenu("Analize"));
mb.add(new JMenu("About"));
JFrame frame = new JFrame("Testing");
frame.setJMenuBar(mb);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new BasePane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class BasePane extends JPanel {
private JTextArea species;
private JTextArea locations;
private JTextArea travelPaths;
private JDesktopPane desktopPane;
public BasePane() {
setLayout(new BorderLayout());
desktopPane = new JDesktopPane();
species = new JTextArea("Species");
locations = new JTextArea("Locations");
travelPaths = new JTextArea("TravelPaths");
JPanel controls = new JPanel(new GridLayout(3, 0));
controls.add(new JScrollPane(species));
controls.add(new JScrollPane(locations));
controls.add(new JScrollPane(travelPaths));
add(controls, BorderLayout.WEST);
add(desktopPane);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
您的需求可能略有不同,但基本概念应该会让您有所行动。
根据应用程序的结构,我可能也想将Controlls
窗格分隔成一个单独的类。
我有表单,我想在我的上显示它们。主窗体是MDI容器,所以我只想知道如何显示主雇员窗体。 下面是创建目标代码的: 这里是调用,尽管它不起作用。 我该如何解决这个问题?我想让表单显示在Jdesktoppane上 它现在正在工作。我使用了以下参考。
主要内容:1 Java JDesktopPane的介绍,2 Java JDesktopPane的字段,3 Java JDesktopPane的构造方法,4 Java JDesktopPane的案例1 Java JDesktopPane的介绍 JDesktopPane类可用于创建“多文档”应用程序。一个多文档应用程序可以包含许多窗口。我们通过在主窗口中将contentPane作为JDesktopPane类或子类的实例来实现。内部窗口将JInternalFrame实例添加到JdesktopPane实
问题内容: 我想在两个JPanel之间绘制线,但是线未出现在layeredPane上。 这是我所做的,请仔细阅读,可编译。请尝试更正此代码。我已经尝试过以这种方式在内部框架上绘制线条,但不适用于JPanels。 问题答案: 我很困惑。您从扩展了类,但随后将其添加到… 扩展中。 默认情况下,如果没有布局管理器,则会将其添加到,大小为0x0。 我不确定您希望借此实现什么。 更新示例 您面临的问题是pa
我想隐藏我的在按钮的触发器中。但这不会隐藏自己。我创建了一个静态的空格方法,它隐藏了框架,并在action中调用它。我需要运行另一个EDT来隐藏我的帧吗?任何提示将不胜感激。
我有一个叫做“菜单项目”的框架。 我有另一个称为"Main_Menu"的框架,它有一个JButton,点击按钮后,我想在JDesktopPane中调用框架"Menu_Project"。我试图遵循一个教程YouTube在这个链接:https://www.youtube.com/watch?v=TUL3qEoZkR4 当我运行它时,我得到: 我的代码: 谁能指出我错在哪里。我下面的视频教程。
问题内容: 我加入一堆s转换为,当用户选择通过菜单打开的各种特征。但是我希望内部框架以桌面窗格为中心打开,而不是默认情况下位于左上方的内部框架。 如何指定JInternalFrames居中打开,或在打开后将其移动到中心? 问题答案: 作为参考,这是我根据dogbane的建议使用的解决方案: