2013-03-15 21 views
11

Çerçeveyi iletişim kutusunun sahibi olarak ayarlamakta sorun yaşıyorum. Normalde, bir iletişim kutusu oluşturmak için JDialog sınıfını genişletdiğimde, alt+tab tuşlarına bastığınızda, her ikisinin de ayrılmayacak şekilde iletişim kutusunun sahibini belirtmek için super(frame) kullanın. Ancak JDialog dialog = new JDialog() gibi new kullanarak bir iletişim kutusu oluşturduğumda, çerçeveyi iletişim kutusunun sahibi olarak belirtemiyorum. Aşağıdaki örnek, yukarıdaki iki yaklaşımı göstermektedir. Top Click düğmesi, JDialog genişletilmeden olan bir iletişim kutusu açar. Bottom Click düğmesi, JDialog genişletme ile bir iletişim kutusu açar.JFrame'in JDialog için bir üst öğe olarak nasıl ayarlanacağı

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JFrame; 

public class DialogEx { 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      public void run() { 
       new DialogEx().createUI(); 
      } 
     }; 
     EventQueue.invokeLater(r); 
    } 

    private void createUI() { 
     final JFrame frame = new JFrame(); 
     frame.setLayout(new BorderLayout()); 

     JButton button1 = new JButton("Top Click"); 
     JButton button2 = new JButton("Bottom Click"); 

     button2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       new DialogExtend(frame).createUI(); 
      } 
     }); 

     button1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       new DialogWithoutExtend(frame).cretaUI(); 
      } 
     }); 

     frame.setTitle("Test Dialog Instances."); 
     frame.add(button1, BorderLayout.NORTH); 
     frame.add(button2, BorderLayout.SOUTH); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(new Dimension(300, 200)); 
     frame.setVisible(true); 
    } 

    class DialogExtend extends JDialog { 
     private JFrame frame; 
     public DialogExtend(JFrame frame) { 
      super(frame); 
      this.frame = frame; 
     } 

     public void createUI() { 
      setLocationRelativeTo(frame); 
      setTitle("Dialog created by extending JDialog class."); 
      setSize(new Dimension(400, 100)); 
      setModal(true); 
      setVisible(true); 
     } 
    } 

    class DialogWithoutExtend { 

     private JFrame frame; 
     public DialogWithoutExtend(JFrame frame) { 
      this.frame = frame; 
     } 

     public void cretaUI() { 
      JDialog dialog = new JDialog(); 
      dialog.setTitle("Dialog created without extending JDialog class."); 
      dialog.setSize(new Dimension(400, 100)); 
      dialog.setLocationRelativeTo(frame); 
      dialog.setModal(true); 
      dialog.setVisible(true); 
     } 
    } 
} 
+0

aslında sizin kodunuzda (koşmadı) bakıyor: sorun nedir (genişlemedeki çerçeveye tekdüze takma adınız hariç)? – kleopatra

+0

@kleopatra __extending JDialog, JFrame__ öğesini genişletmek kadar kötüydü. Yeni kullanarak bir diyalog oluşturduğumda çerçeveyi nasıl bir diyalog haline getirebileceğimi bilmek istiyorum. – Amarnath

+0

, çerçeveyi uzattığınız zamanki gibi alan kurucuyu kullanarak mı? Bir şey eksik olmalı ... lütfen açıklayın :-) – kleopatra

cevap

10

bir iletişim (veya pencerenin) sahibi yapıcısı içinde sadece set, bu nedenle ayarlamak için tek yol gibi parametre olarak sahibini alan yapıcıya kullanmaktır edilebilir:

class DialogWithoutExtend { 

    private JFrame frame; 
    public DialogWithoutExtend(JFrame frame) { 
     this.frame = frame; 
    } 

    public void cretaUI() { 
     JDialog dialog = new JDialog(frame); 
     dialog.setTitle("Dialog created without extending JDialog class."); 
     dialog.setSize(new Dimension(400, 100)); 
     dialog.setLocationRelativeTo(frame); 
     dialog.setModal(true); 
     dialog.setVisible(true); 
    } 
} 
İlgili konular