所以我在其中创建了一个JDesktopPane和JInternalFrame(我正在使用Windows L& F),但是当我最大化JInternalFrame时,它在Windows中不起作用。我的意思是框架应该消失并且3个按钮{{0}应该在JMenuBar里面。
有没有解决办法让我的JInternalFrame在JMenuBar中最大化?
答案 0 :(得分:2)
我“猜”你正在设置框架的边界(大小/位置)以匹配JDesktopPane
的大小。您应该使用JInternalFrame#setMaximum
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JDesktopPane dp = new JDesktopPane() {
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
};
JInternalFrame iFrame = new JInternalFrame("Test", true, true, true, true);
iFrame.add(new TestPane());
iFrame.setVisible(true);
iFrame.pack();
dp.add(iFrame);
JMenuBar mb = new JMenuBar();
JMenu menu = new JMenu("Window");
JMenuItem mi = new JMenuItem("Maximise");
mi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JInternalFrame iFrame = dp.getSelectedFrame();
if (iFrame != null) {
try {
iFrame.setMaximum(true);
} catch (PropertyVetoException ex) {
ex.printStackTrace();
}
}
}
});
menu.add(mi);
mi = new JMenuItem("Restore");
mi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JInternalFrame iFrame = dp.getSelectedFrame();
if (iFrame != null) {
try {
iFrame.setMaximum(false);
} catch (PropertyVetoException ex) {
ex.printStackTrace();
}
}
}
});
menu.add(mi);
mb.add(menu);
JFrame frame = new JFrame("Testing");
frame.setJMenuBar(mb);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(dp);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
dp.setSelectedFrame(iFrame);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
在C#中,这是一个默认的功能,当你最大化一个内部框架时,它在菜单栏中最大化并且它周围的蓝框消失了,但它在java中不是一回事
这不能在Swing中完成......或者至少,除非你想完全重写外观,否则无法完成