Как убрать кнопки максимизации и минимизации из JFrame?
Мне нужно удалить кнопки максимизации и минимизации из JFrame
, Пожалуйста, предложите, как это сделать.
4 ответа
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Dlg extends JDialog {
public Dlg(JFrame frame, String str) {
super(frame, str);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
public static void main(String[] args) {
try {
Dlg frame = new Dlg(new JFrame(), "No min max buttons");
JPanel panel = new JPanel();
panel.setSize(200, 200);
JLabel lbl = new JLabel("blah blah");
panel.add(lbl);
frame.add(panel);
frame.setSize(400, 400);
frame.setVisible(true);
} catch (IllegalArgumentException e) {
System.exit(0);
}
}
}
Вот связанный пример использования setUndecorated()
отключить рамку декораций.
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class FrameTest implements Runnable {
public static void main(String[] args) {
EventQueue.invokeLater(new FrameTest());
}
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setUndecorated(true);
JPanel panel = new JPanel();
panel.add(new JLabel("Stackru!"));
panel.add(new JButton(new AbstractAction("Close") {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}));
f.add(panel);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
Примечание. Сначала я отредактировал ответ stacker, но вместо этого было предложено создать новый ответ.
Есть несколько способов настроить элементы управления окнами, доступные вашим пользователям.
В настоящее время единственный способ удалить кнопки "Развернуть" и "Свернуть", сохраняя заголовок и кнопку закрытия, - это использовать JDialog
вместо JFrame
:
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class DialogDemo {
public static void main(String[] args) {
JDialog dialog = new JDialog(new JFrame(), "No min max buttons");
// necessary as setDefaultCloseOperation(EXIT_ON_CLOSE) is
// not available for JDialogs.
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
JLabel label = new JLabel("blah blah");
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(400, 400));
panel.add(label);
dialog.add(panel);
dialog.pack();
dialog.setVisible(true);
}
}
Диалоговое решение не позволяет пользователям свернуть и развернуть окно, в том числе с помощью ярлыков, однако оно не лишает возможности изменять размер окна.
С помощью setResizable(false)
удалит только кнопку максимизации, за счет невозможности изменить размер окна.
И, наконец, как упоминал trashgod, setUndecorated(true)
Метод отключит оформление рамки, удалив строку заголовка и края окна. Это затрудняет пользователям перетаскивание, изменение размера и закрытие окна, хотя это и не невозможно, поскольку эти действия все еще можно выполнять с помощью сочетаний клавиш.
Вы можете попробовать это:
JFrame loadingDialog = new JFrame();
JLabel label = new JLabel("blah blah");
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(400, 400));
panel.add(label);
loadingDialog.add(panel);
loadingDialog.setUndecorated(true);
loadingDialog.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
loadingDialog.pack();
loadingDialog.setVisible(true);