Я предполагаю, что вы устанавливаете границы рамки (размер/местоположение) в соответствии с размером 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, что, когда и разворачивать внутренний фрейм он максимизируется в строке меню и синей рамкой вокруг него исчезнет, но это не то же самое в Java
Это не может быть сделано в свинге ... или, по крайней мере, это не может быть сделано, если вы не хотите, чтобы полностью переписать внешний вид и
все та же проблема JInternalFrame не развернута в JMenuBar. – SlimenTN
Рассмотрите возможность использования [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer
На самом деле у меня нет проблем с кодом или максимизацией JInternalFrame. Я разместил 2 снимка, которые показывают, что именно я хочу. Первый pic - случайное приложение (созданное C#, я думаю), так как вы можете видеть, что JInternalFrame максимизируется в строке меню. Второй pic - мое приложение с java, так как вы также можете видеть, что JInternalFrame максимизирован, но не в JMenuBar, как в первый pic.I спрашивал, если это ошибка в java L & F или есть решение для нее. – SlimenTN