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?
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…
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…
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?
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();
}
});
}
}
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???
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!!!