0
所以我創建了一個JDesktopPane和JInternalFrame(我使用的是Windows L & F),但是當我最大化JInternalFrame時,它不能像Windows一樣工作。我的意思是框架應該消失,3個按鈕應該在JMenuBar中。
Maxenzing JenternalFrame in JMenuBar
有沒有什麼解決方案,使我在的JInternalFrame JMenuBar的最大化?
所以我創建了一個JDesktopPane和JInternalFrame(我使用的是Windows L & F),但是當我最大化JInternalFrame時,它不能像Windows一樣工作。我的意思是框架應該消失,3個按鈕應該在JMenuBar中。
Maxenzing JenternalFrame in JMenuBar
有沒有什麼解決方案,使我在的JInternalFrame JMenuBar的最大化?
我「猜測」你設置框架的邊界(大小/位置)以匹配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#這是一個默認fonctionality即當u最大化的內部框架是在菜單欄和它周圍的藍色框消失真實最大化,但它不是在Java
同樣的事情
這不能在Swing做......至少,它不能這樣做,除非你想完全重新編寫的外觀和感覺
還是同樣的問題JInternalFrame未處於最大化的JMenuBar。 – SlimenTN
考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它演示了您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的混淆和更好的迴應 – MadProgrammer
實際上我沒有在代碼或JInternalFrame最大化問題我發佈了2張圖片,顯示我到底想要什麼。第一張圖是一個隨機應用程序(由C#創建,我猜),因爲你可以看到JInternalFrame在菜單欄中是最大化的。第二張圖是我用Java編寫的應用程序,你也可以看到JInternalFrame是最大化的,但不是在JMenuBar中,就像第一張圖片。我問這是Java L&F中的一個bug還是有解決方案。 – SlimenTN