Não permitir clique em janela sem foco

10 respostas
fabricioempresa

Boa tarde!

Pessoal é o seguite tenho uma view que chama outra view.

Porém gostaria que a 1a view não pudesse ser clicada até a 2a view ser fechada ou cancelada como eu poderia fazer isso?

10 Respostas

R

Crie a segunda view como uma caixa de diálogo modal.

julianofischer

Use a classe JDialog

fabricioempresa

Mas eu posso colocar botões,tabelas e varios outros componentes dentro de um JDialog.

E roger_rf a minha view já esta criada tem como eu fazer esse MODAL que você falou alterando alguma propriedade dentro do Netbeans?

Desde já agradeço pela atenção

R

No designer do NetBeans você poderia marcar a propriedade modal, caso se trate de um JDialog ou um Dialog. Porém, o ideal é ajustar essa propriedade no construtor:

http://java.sun.com/javase/6/docs/api/javax/swing/JDialog.html#JDialog(java.awt.Dialog,%20boolean)

Hellmanss

fabricioempresa:
Mas eu posso colocar botões,tabelas e varios outros componentes dentro de um JDialog.

E roger_rf a minha view já esta criada tem como eu fazer esse MODAL que você falou alterando alguma propriedade dentro do Netbeans?

Desde já agradeço pela atenção

Pode-se adicionar todos esses componentes que voce citou sim.

fabricioempresa

Bah pessal não estou conseguindo entender como passar isso pra MODAL

Desculpa aew pela dúvida.

Valeu

di0

fabricioempresa:
Bah pessal não estou conseguindo entender como passar isso pra MODAL

Desculpa aew pela dúvida.

Valeu

Quer dizer que você deve criar uma classe que extenda a JDialog. Geralmente se cria os formulários extendidos da classe JFrame mas esta classe ainda não possui implementação para que impeça o acesso a outras janelas.

discorpio

Boa noite pessoal;

Simples basta passar o parâmetro “true” dentro do construtor para a janela ficar Modal, desta forma:

...
   public class MinhaCaixaDialog extends JDialog {

      public MinhaCaixaDialog(JFrame frame, String title){
            super(frame, title, true);
            ....
      }
   }

Observações: O JDialog só permite frames Modais dentro da Aplicação Java, ou seja, se voce clicar fora do JDialog, porém dentro do Frame Principal ou de outro frame de sua aplicação, então o Modal funcionará, entretanto, se a janela do Frame Principal foi menor que a resolução de tela do Windows, e voce clicar fora da aplicação, neste caso, o foco passa o controle para o Sistema Operacional e o modal não funcionará neste caso. Portanto, recomendo que voce utilize um Frame Principal que tome toda a janela do Windows.

fabricioempresa

Bom tentei as dicas que vocês me deram mas não consegui (acho que por incompetência minha)

mas segue o codigo do meu Jframe para mostrar como estou fazendo.

package br.com.nautec.flowtracklite.view;

import br.com.nautec.flowtracklite.control.FileConfig;
import br.com.nautec.flowtracklite.model.dto.EventSensor;
import br.com.nautec.flowtracklite.model.dto.Sensor;
import br.com.nautec.flowtracklite.model.dto.SensorPk;
import br.com.nautec.flowtracklite.model.exceptions.EventSensorDaoException;
import br.com.nautec.flowtracklite.model.exceptions.SensorDaoException;
import br.com.nautec.flowtracklite.model.factory.EventSensorDaoFactory;
import br.com.nautec.flowtracklite.model.factory.SensorDaoFactory;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import org.jdesktop.application.Action;

/**
 *
 * @author naueng2
 */
public class CalibrateView extends javax.swing.JFrame {

    private Date dt;
    private int sens;
   
    ApplicationView app = ApplicationView.getInstance();

    /** Creates new form CalibrateView */
    private CalibrateView() {
      
        initComponents();
        Aferir.setEnabled(false);
        Calc.grabFocus();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new CalibrateView().setVisible(true);

            }
        });
    }

    public JFormattedTextField getServ() {
        return Serv;
    }

    public void setServ(JFormattedTextField Serv) {
        this.Serv = Serv;
    }

    public JButton getCalibrar() {
        return Calibrar;
    }

    public void setCalibrar(JButton Calibrar) {
        this.Calibrar = Calibrar;
    }

    public Date Calibrate(Date dt) throws ParseException {
        this.dt = dt;
        return this.dt;
    }

    public JFormattedTextField getCalc() {
        return Calc;
    }

    public void setCalc(JFormattedTextField Calc) {
        this.Calc = Calc;
    }

    public JButton getAferir() {
        return Aferir;
    }

    public void setAferir(JButton Aferir) {
        this.Aferir = Aferir;
    }

    @Action
    public void Correction() {//corretion
        if (Calc.getText().trim().equals("") || Serv.getText().trim().equals("")) {
            JOptionPane.showMessageDialog(null, "Digite valor servido");
        } else {
            try{
            float vlCalc = Float.parseFloat(Serv.getText().replace(",", "."));
            float porcenMenos = (vlCalc * 10) / 100; // valor 10% menor do que o servido
            float porcenMais = ((vlCalc * 10) / 100) + vlCalc; // valor 10% maior do que o servido
            float vlMed = Float.parseFloat(Calc.getText().replace(",", "."));
            if (vlMed < porcenMenos || vlMed > porcenMais) {// se o valor servido for 10% maior ou menor
                //do que o servido então não é calibrado e emite a mensagem.
                JOptionPane.showMessageDialog(null, "Valor fora da taxa de tolerância");
            } else {
                int selectedOption = JOptionPane.showConfirmDialog(null, "Confirmar Calibração?",
                        "Por favor, confirme:", JOptionPane.YES_NO_OPTION);
                if (selectedOption == JOptionPane.YES_OPTION) {
                    try {
                        Sensor sensor;
                        float correction = 0;
                        sensor = SensorDaoFactory.create().findWhereAddressEquals(sens);
                        if (sensor.getCorrection() > 0) {
                            correction = (vlMed * sensor.getCorrection()) / vlCalc;
                        } else {
                            correction = vlMed / vlCalc;
                        }
                        sensor = SensorDaoFactory.create().findWhereAddressEquals(sens);
                        sensor.setCorrection(correction);
                        String data = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date(System.currentTimeMillis()));
                        FileConfig.getInstance().setStatus(sens - 100, data);
                        FileConfig.getInstance().writeFile();
                        SensorPk pk = new SensorPk(sensor.getId());
                        SensorDaoFactory.create().update(pk, sensor);
                    } catch (SensorDaoException ex) {
                        Logger.getLogger(CalibrateView.class.getName()).log(Level.SEVERE, null, ex);
                    }
                   
                }
            }
        }catch (NumberFormatException ex){
            JOptionPane.showMessageDialog(null,"Digite número válido");
            Calc.setText("");
        }}
    }




    @Action
    public void Cancel() {
        CalibrateView.this.dispose();
    }


    public void Fim() throws ParseException {
        EventSensor[] es;
        float total = 0;
        try {
            es = EventSensorDaoFactory.create().findCalibrate(sens, dt);
            for (int i = 0; i < es.length; i++) {
                if (es[i].getCorrection() > 0) {
                    total = ((es[i].getPulse() / 6100f) * es[i].getCorrection());
                } else {
                    total = ((es[i].getPulse() / 6100f));
                }
                System.out.println("Número não arrendondado= " + total);
                BigDecimal valorExato = new BigDecimal(total).setScale(2, RoundingMode.HALF_DOWN);
                System.out.println(" Número arrendondado =  " + valorExato);
                Serv.setText(valorExato.toString()+ "0");
                Calibrar.setEnabled(true);
                Aferir.setEnabled(true);
            }
        } catch (EventSensorDaoException ex) {
            Logger.getLogger(CalibrateView.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Action
    public void Gauge() {
        int selectedOption = JOptionPane.showConfirmDialog(null, "Confirmar Aferição?",
                "Por favor, confirme:", JOptionPane.YES_NO_OPTION);
        if (selectedOption == JOptionPane.YES_OPTION) {
            String data = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date(System.currentTimeMillis()));
            FileConfig.getInstance().setFericao((sens - 100), data);
            FileConfig.getInstance().writeFile();
        }
    }

    /**
     *
     * @return
     */
    public static synchronized CalibrateView getInstance() {
        return CalibrateViewHolder._Instance;
    }

    public void Sensor(int sens) {
        this.sens = sens;
    }

    /**
     *
     */
    final static class CalibrateViewHolder {

        final static CalibrateView _Instance = new CalibrateView();
    }

Desde já agradeço a todos

Preco

Ali a classe tá herdando de JFrame… Faz ela herdar de JDialog
Daí faz o construtor que nem o discorpio falou…

Criado 27 de maio de 2010
Ultima resposta 28 de mai. de 2010
Respostas 10
Participantes 7