2013-08-06 2 views
0

У меня есть JDialog с кнопкой, которая открывает новое окно. Я хочу сделать это, чтобы заблокировать этот JDialog всякий раз, когда открывается другое окно. Когда я говорю блок, я имею в виду, что пользователь не может манипулировать им, а не перемещать его или максимизировать или что-то еще.Заблокируйте JDialog при открытии другого

Кстати, рекомендуется ли использовать JDialog для окна с кнопками и таблицей? Я не понимаю, когда мне нужно использовать рамку!

Это то, что я получил:

public class Platos extends JDialog { 

    private final JPanel contentPanel = new JPanel(); 

    public static void main(String[] args) { 
     try { 
      Platos dialog = new Platos(); 
      dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
      dialog.setVisible(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    }  

    public Platos() { 
     setBounds(100, 100, 450, 300); 
     getContentPane().setLayout(new BorderLayout()); 
     contentPanel.setLayout(new FlowLayout()); 
     contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     getContentPane().add(contentPanel, BorderLayout.CENTER); 
     { 
      JButton btnAgregarPlato = new JButton("Agregar Plato"); 
      btnAgregarPlato.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent arg0) { 
       AgregarPlato ap = new AgregarPlato(); 
       ap.setVisible(true); 
       } 
      }); 
      btnAgregarPlato.setFont(new Font("Tahoma", Font.PLAIN, 11)); 
      contentPanel.add(btnAgregarPlato); 
     } 
    }  
} 

ответ

3

JDialog правильный выбор действительно.

Чтобы сделать это заблокировать родительское окно, вы должны добавить конструктор Platos, который будет использовать JDialog конструктор с родительского кадра:

JDialog dlg = new JDialog(parentWindow, modality); 

Где parentWindow обычно является JFrame.

Вы сделать это следующим образом:

public Platos(JFrame parent) { 
    super(parent, ModalityType.APPLICATION_MODAL); 
    .... 

Хитростью является ModalityType.APPLICATION_MODAL аргументом, который делает ваш диалог блок все другие диалогам и основной рамы.

Вы можете передать родительскому основному окну, оно будет работать нормально даже если вы открываете диалог из другого - последний блокирует все предыдущие.


Дополнительную информацию см. На странице docs.

Смежные вопросы