Fórum Como obrigar uma frame a ser "modal" #568297

09/04/2009

0

Boas, Na minha aplicação tenho algumas frames que têm de ser "modal". Como consigo fazer isso em Java? Obrigado
Ffar

Ffar

Responder

Posts

09/04/2009

Gabriel Millian

A maneira mais simples é usar um JDialog e setar setModal(true).
Responder

Gostei + 0

09/04/2009

Victor Muniz

o que é modal ? como assim um jframe ser modal ?
Responder

Gostei + 0

09/04/2009

Ffar

Gabriel podes explicar melhor? A minha prática em JAVA está muito enferrujada. Tenho o seguinte: public class mainClass javax.swing.JFrame { public showTheOtherClassButtonEvent() { OtherClass oC = new OthetClass(); } } public class OtherClass javax.swing.JFrame { /** Creates new form OtherClass */ public OtherClass () { initComponents(); setVisible(true); } } Ou seja, quando clico num botão do form "mainClass" (é chamado o método showTheOtherClassButtonEvent) abre-se o form OtherClass. Eu quero que "OtherClass" seja modal. victor, ser "modal" significa que o respectivo form enquanto estiver aberto não deixa vc clicar em nada que esteja por baixo noutros forms.
Responder

Gostei + 0

09/04/2009

Gabriel Millian

O mais fácil é vc ao invés de abrir um novo JFrame quando o usuário clicar em um botão, abrir um JDialog e usar o método que eu citei. Dá uma olhada na documentação do componente: http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JDialog.html e no tutorial: http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html Veja se esse componente atende as suas necessidades. Caso você necessite implementar essa funcionalidade em um JFrame, você terá que controlar esse comportamento na mão.
Responder

Gostei + 0

09/04/2009

Glaucio Melo

Alguem sabe se versoes mais novas da API já colocaram metodo modal em JFrame? Da ultima vez que precisei fazer isso foi com JDialog. Isso dá margem pra gambiarras feiosas pra modal em JFrame :D
Responder

Gostei + 0

09/04/2009

Ffar

[quote="gabrielpl"]Caso você necessite implementar essa funcionalidade em um JFrame, você terá que controlar esse comportamento na mão.
E qual é o mecanismo para fazer isso? Não há nenhuma class já feita que controle isso?
Responder

Gostei + 0

09/04/2009

Vitor Pamplona

[quote="Proteu Alcebidiano"]Alguem sabe se versoes mais novas da API já colocaram metodo modal em JFrame? Da ultima vez que precisei fazer isso foi com JDialog. Isso dá margem pra gambiarras feiosas pra modal em JFrame :D
Pelo que sei o Java6 vem com JFrame modal.
Responder

Gostei + 0

09/04/2009

Domingos Santos

Olá bom dia a todos, Para implementar uma caixa de diálogo, você deriva uma classe de [i]JDialog[/i]. É essencialmente o mesmo processo que derivar a janela para um aplicativo a partir de [i]JFrame[/i]. mais precisamente:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DialogTeste {

	public static void main(String[] args) {
	
		DialogFrame frame = new DialogFrame();
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setVisible( true );
	}

}

class DialogFrame extends JFrame{
	
	public DialogFrame(){
		
		setTitle("DialogFrame");
		setSize( DEFAULT_WIDTH, DEFAULT_HEIGHT );
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar( menuBar );
		
		JMenu fileMenu = new JMenu("File");
		menuBar.add( fileMenu );
		
		JMenuItem aboutItem = new JMenuItem("About");
		aboutItem.addActionListener( new ActionListener(){
			public void actionPerformed( ActionEvent event )
			{
				if( dialog == null ) // primeira vez
					dialog = new AboutDialog( DialogFrame.this );
				
				dialog.setVisible( true );				
			}
		});
		
		fileMenu.add( aboutItem );
		
		JMenuItem exitItem = new JMenuItem("Exit");
		exitItem.addActionListener( new ActionListener(){
			public void actionPerformed( ActionEvent event )
			{
				System.exit(0);				
			}
		});
		
		fileMenu.add( exitItem );
		
	}
	
	public static final int DEFAULT_WIDTH = 300;
	public static final int DEFAULT_HEIGHT = 200;
	
	private AboutDialog dialog;
}

class AboutDialog extends JDialog{
	
	public AboutDialog( JFrame owner ){
		
		super( owner, "About DialogTeste", true );
		
		add( new JLabel( "<html><h1><i>Core Java</i></h1><hr>www.javafree.org</html>" ) , BorderLayout.CENTER  );
		
		JButton ok = new JButton("Ok");
		ok.addActionListener( new ActionListener(){
			public void actionPerformed( ActionEvent event ){
				setVisible( false );
			}
		});
		
		JPanel panel = new JPanel();
		panel.add( ok );
		
		add( panel, BorderLayout.SOUTH );
		
		setSize( 250, 150 );
		
	}
}
é um exemplo completo, e pode auxiliar no entendimento da classe JDialog. Espero ter ajudado. atenciosamente
Responder

Gostei + 0

09/04/2009

Vitor Pamplona

[quote="ffar"][quote="gabrielpl"]Caso você necessite implementar essa funcionalidade em um JFrame, você terá que controlar esse comportamento na mão.
E qual é o mecanismo para fazer isso? Não há nenhuma class já feita que controle isso?
Com JFrame não, somente com JDialog. Tutorial da Sun para transformar um JFrame em modal: http://java.sun.com/developer/JDCTechTips/2001/tt1220.html
Responder

Gostei + 0

09/04/2009

Vitor Pamplona

Bem, resolvi o problema (mesmo com JFrame) utilizando uma class disponibilizada por um colega nosso. Para quem necessitar pode ver aqui: http://www.jroller.com/page/santhosh?entry=are_you_missing_maximize_button
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar