Как я могу удалить только кнопку Maximize из JFrame?

У меня есть JFrame и вы хотите удалить кнопку максимизировать.

Я написал код ниже, но он удалял максимизацию, минимизацию и закрытие от моего JFrame.

JFrame frame = new JFrame();
frame.add(kart);
frame.setUndecorated(true);
frame.setVisible(true);
frame.setSize(400, 400);

Я хочу удалить только кнопку максимизации из JFrame.

7 ответов

Сделайте его не изменяемым по размеру:

frame.setResizable(false);

У вас все еще будут кнопки минимизации и закрытия.


Вы не можете удалить кнопку с JFrame. Вместо этого используйте JDialog. Он не имеет кнопки максимизации.


В свойствах JFrame → maximumSize = minimumSize. И resizable = false. Готово! Кнопка отключена.


import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import javax.swing.JDialog; import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test extends JDialog {
 public Test(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 {
 Test myFrame = new Test(new JFrame(), "Removing maximize button");
 JPanel panel = new JPanel();
 panel.setSize(100, 100);
 myFrame.add(panel);
 myFrame.setSize(100, 100);
 myFrame.setVisible(true);
 } catch (IllegalArgumentException e) {
 System.exit(0);
 }
 } }


/**
 * Removes the buttons from the JDialog title frame. This is a work around
 * to removing the close button
 * 
 * This is confirmed to work with the Metal L&F
 */
public void removeAllTitleFrameButtons() {
 /* Get the components of the dialog */
 Component[] comps = this.getRootPane().getComponents();
 /* Indicator to break from loop */
 boolean breakFromLoop = false;
 /*
 * Go through the components and find the title 
 * pane and remove the buttons. 
 */
 for(Component comp : comps) {
 /* Shall we break from loop */
 if(breakFromLoop) break;
 if(comp.getClass().getName().indexOf("JLayeredPane") >0) {
 for(Component jcomp : ((JLayeredPane)comp).getComponents()) {
 if(jcomp.getClass().getName().indexOf("Title") > 0) {
 /* Get the XXXXTitlePane Components */
 Component[] titlePaneComps = ((JComponent)jcomp).getComponents();
 for(Component tpComp : titlePaneComps) {
 if(tpComp instanceof JButton) {
 ((JButton)tpComp).setVisible(false); 
 }
 }
 /* No need to continue processing */
 breakFromLoop = true;
 break;
 }
 }
 }
 }
}


Там описано, как реализовать "JFrame" без максимизации и сглаживания кнопок. Вам нужно просто "инкапсулировать" JFrame в JDialog:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class RemoveMaxAndMinButton extends JDialog{
 public RemoveMaxAndMinButton(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{
 RemoveMaxAndMinButton frame = new RemoveMaxAndMinButton(new JFrame(),
 "Remove the Minimize and Maximize button from the Title Bar");
 JPanel panel = new JPanel();
 panel.setSize(200,200);
 JLabel lbl = new JLabel("RoseIndia.Net");
 panel.add(lbl);
 frame.add(panel);
 frame.setSize(400, 400);
 frame.setVisible(true);
 }
 catch(IllegalArgumentException e){
 System.exit(0);
 }
 }

}


Если вы используете Netbean, просто отмените выбор параметра resizable в свойствах. Это приведет к отключению кнопки "Минимизировать/увеличить".

licensed under cc by-sa 3.0 with attribution.