Como retirar o botão fechar de um JFrame?

Senhores.

Estou precisando de ajuda… Preciso retirar o botão Fechar de um formulário meu em JFrame. Já dei uma pesquisada na Internet e vi algumas pessoas dizendo que não tem como fazer isso, pois o Java utiliza esse padrão de janela do Windows e não tem como altera-lo. Isso é verdade?

Como eu poderia retirar esses botões?

Obrigado,

Sds,

Vinicius

olha…até aonde eu sei…não tem como mesmo…a nao ser que você tente fazer em splash…oO

so que…quando eu tentei fazer isto…ele não criava a barrinha do programa aqui em baixo…ou seja…se ele minimizar por algum motivo…vc nao consegue abrir…nem com alt+tab…

(pelomenos foi oque aconteceu comigo né?)

Relamente eu não sei se dá, vamos ver o que o pessoal responde. Mas eu gostaria de saber pq vc quer tirar. Se for simplesmente para o usuário não poder fechar e janela, vc pode deixar o botao lá e setar o DefaultCloseOperation para DO_NOTHING_ON_CLOSE. Ou, dependendo da sua aplicação, vc poderia trabalhar com um JInternaFrame. Esse sim dá pra tirar o botao de fechar, maximizar, miniminar e etc…

Dae cara…

se não me engano… tem um método chamado setClosable(boolean b);

usa ele passando false. :wink:

[]´s

Amigos,

Primeiramente, gostaria de agardecer pelas respostas… Bem, vamos lá.

Certo… Não é possível retirar os botões de um JFrame. Para fazer isso, teria que usar uma outra classe. Mas enfim, vou continuar com o JFrame e me adaptar a essa situação.

Sobre as dicas… O método setClosable(boolean b) não existe. Pelo menos, eu não achei.
Já o setDefaultCloseOperation(DO_NOTHING_ON_CLOSE) não funciona. Eu fecho o frame em questão mas a aplicação toda é encerrada.

Gostaria de clicar no botão fechar e fechar somente a janela onde foi clicada. Do jeito que está, a aplicacao toda é fechada. Como devo proceder?

Abraços,

Vinicius

Espero que isso possa ajudar.

Essa era a forma que nossos avós faziam antes de setDefaultCloseOperation

package guj;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

public class MinhaJanela extends JFrame {
	
       public MinhaJanela() {
		addWindowListener(
				new WindowAdapter() 
				{
					public void windowClosing(WindowEvent we) {
						//coloque um brak point aqui e teste.
						//Aqui vc faz o que quiser quando clicarem no botao fechar, pode ate mesmo nao fazer nada.
						dispose();
						//System.exit(0);
					}
				}
		);
		
		setSize(320, 200);
		setVisible(true);
	}

	public static void main(String[] args) {
		new MinhaJanela();
	}
}

void javax.swing.JFrame.setDefaultCloseOperation(int operation)
Sets the operation that will happen by default when the user initiates a “close” on this frame. You must specify one of the following choices:

DO_NOTHING_ON_CLOSE (defined in WindowConstants): Don’t do anything; require the program to handle the operation in the windowClosing method of a registered WindowListener object.

HIDE_ON_CLOSE (defined in WindowConstants): Automatically hide the frame after invoking any registered WindowListener objects.

DISPOSE_ON_CLOSE (defined in WindowConstants): Automatically hide and dispose the frame after invoking any registered WindowListener objects.

EXIT_ON_CLOSE (defined in JFrame): Exit the application using the System exit method. Use this only in applications.
The value is set to HIDE_ON_CLOSE by default. Changes to the value of this property cause the firing of a property change event, with property name “defaultCloseOperation”.

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;

/* FrameDemo.java requires no other files. */
public class FrameDemo {
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("FrameDemo");
        frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

        JLabel emptyLabel = new JLabel("");
        emptyLabel.setPreferredSize(new Dimension(175, 100));
        frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

Você deve usar

JFrame frame = new JFrame();
frame.setUndecorated(true);

Com esse comando você esconde os controles da Janela (JFrame).

Cícero Lopes :smiley:

Olá Cicero, blz??
Seguinte to com o mesmo problema q o amigo ai de cima e então resolvi seguir sua dica com o frame.setUndecorated(true); so que não funcionou…primeiro deixa eu explicar a minha aplicação e o que eu fiz nela.
Tenho 02 formulários que são feitos em JPanel e chamados como JDialog, ai eu quero que o usuário so possa fechar o 2º form pelo botão de salvar ou cancelar (quero discartar o fechar padrão do form), ai o q q eu fiz: 1º tentei colocar assim: iDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); dentro do 1º form que chama o segundo, ai não deu nada, não fez nada…ai tentei chamar esse mesmo método depois do initComponents(); do 2º form (que é aquele q quero que o botão de fechar fique desabilitado) e também não fez nada…roda normal mas não funciona…
Ai peguei o método que vc falou (setUndecorated(true)) e chamei dentro do 1º form (quando eu crio o 2º form) e no inicio do 2º form. Ai se chamo quando estou criando o 2º form ele roda a aplicação e nao faz nada, mas se chamo ele na hora de iniciar os componentes do 2º form ele da um erro de: java.lang.NullPointerException
Será que vc pode me ajudar a resolver esse problema???

Obrigado pessoal!

Vlw ai Cicero funcionou direitinho!

Galera!!!Achei um jeito simples para retirar os botões do JFrame.
No NetBeans vá em propriedades do JFrame
Lá vc encontrará uma opção chamada “undercorated
Marque essa opção e depois carregue o JFrame !!
Espero ter ajudado, pois comigo funcionou!!!


1 curtida