Como retirar o botão fechar de um JFrame?

10 respostas
V

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

10 Respostas

R

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é?)

R

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…

J

Dae cara…

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

usa ele passando false. :wink:

[]´s

V

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

A

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();
            }
        });
    }
}
C

Você deve usar

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

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

Cícero Lopes :smiley:

D

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!

H

Vlw ai Cicero funcionou direitinho!

F

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!!!


F



Criado 24 de janeiro de 2009
Ultima resposta 30 de nov. de 2012
Respostas 10
Participantes 9