Мне нужно удалить кнопки максимизации и уменьшения с JFrame
. Пожалуйста, предложите, как это сделать.Как удалить кнопки максимизации и уменьшения из JFrame?
ответ
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);
}
}
}
Есть ли какие-либо минусы этого? – iKlsR
Ваш ответ? Вы не объясняете, что делаете, и я не вижу, где вы удаляете кнопки min/max из JFrame. Пока я вижу, где вы собираетесь с этим, мне потребовалось несколько минут, чтобы подумать, как это было ответом. – Aaron
Остерегайтесь, это решение делает его немного сложнее сфокусировать окно. Это диалог, который означает, что он не будет отображаться как открытая программа в Windows. Если пользователь фокусирует другое окно, такое как веб-браузер, чтобы повторно сфокусировать диалог, пользователь должен будет свести к минимуму все другие программы. –
Вот пример, связанный с использованием 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("Stackoverflow!"));
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 «s ответ, но это было предложено создать новый ответ вместо этого.
Существует несколько способов настройки элементов управления окнами, доступных вашим пользователям.
В настоящее время единственный способ удалить Maximize и кнопок сворачивания, сохраняя при этом в строке заголовка и кнопку закрытия, чтобы использовать 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)
отключит декорации кадров, удалив строку заголовка и края окна. Это затрудняет пользователям перетаскивание, изменение размера и закрытие окна, хотя это и невозможно, так как эти действия могут выполняться с помощью сочетаний клавиш.
Это единственный ответ, который фактически отвечает на вопрос. – Aaron
Взгляните на http://stackoverflow.com/questions/2527021/how-to-disable-minimize-button-in-frame и посмотрите, отвечает ли это на ваш вопрос. –
говорится об использовании JDialog, в myeclipse я импортирую java.awt. *, Но JDialog не распознается. любая помощь по этому поводу? – silverkid
'JDialog' и' JFrame' находятся в пакете 'java.swing'. Вам нужно импортировать java.swing. * '. –