2015-01-13 2 views
0

Моя проблема в этом. Я получил два окна, которые работают вместе и движутся вместе. enter image description hereJFrame, toFront(), ActionListener

enter image description here

Однако, если я затем открыть broweser или что-то, что будет идти в передней части экрана, а затем я пытаюсь показать свою программу перед нажав ее на панели задач, то только одно окно выходит в фронт. Диалог находится сзади, и я не знаю, как его исправить.

Я знаю, что есть функция ToFront(), но я не знаю, как ее использовать в этом сценарии.

+0

Создать MenuItem для второго окна в основном, это будет либо переключение между основным калькулятором и продвинутым. (например, Windows Calculator -> Scientific и т. д.) – Kenyanke

+0

устранит проблему или это просто предложение эстетики? – Tomasz

+0

Я в настоящий момент студент колледжа, и за последние два года я сделал много калькуляторов, проще всего было бы реализовать MenuItem. – Kenyanke

ответ

0

Это должно решить вашу проблему, так как VGR уже сказал ... покадрово Диалог будет следовать его родители:

public class FocusMain extends JFrame { 

    private static FocusMain frame; 
    private static JDialog dialog; 
    private JCheckBox checkBox; 

    private JPanel contentPane; 

    public static void main(String[] args) { 
     frame = new FocusMain(); 
     frame.setVisible(true); 
     dialog = new JDialog(frame); 
     dialog.setSize(100, 100); 
    } 

    public FocusMain() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     setContentPane(contentPane); 

     checkBox = new JCheckBox("show dialog"); 
     checkBox.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       if (checkBox.isSelected()) { 
        dialog.setVisible(true); 
       } else { 
        dialog.setVisible(false); 
       } 
      } 
     }); 
     contentPane.add(checkBox); 
    } 
} 

С расширенной JDialog вам нужно будет пройти родительский фрейм через конструктор и если ваш конструктор выглядит следующим образом: public ExtendedJDialog(JFrame parentFrame), то вы можете подключить его с его родительского фрейма с super(parentFrame); в качестве первой строки в конструкторе ...

public class FocusMain extends JFrame { 

    private static FocusMain frame; 
    private static FocusDialog dialog; 
    private JCheckBox checkBox; 

    private JPanel contentPane; 

    public static void main(String[] args) { 
     frame = new FocusMain(); 
     frame.setVisible(true); 
     dialog = new FocusDialog(frame); 
    } 

    public FocusMain() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     setContentPane(contentPane); 

     checkBox = new JCheckBox("show dialog"); 
     checkBox.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       if (checkBox.isSelected()) { 
        dialog.setVisible(true); 
       } else { 
        dialog.setVisible(false); 
       } 
      } 
     }); 
     contentPane.add(checkBox); 
    } 
} 

и расширенный JDialog

public class FocusDialog extends JDialog { 

    public FocusDialog(JFrame parentFrame) { 
     super(parentFrame); 
     setSize(100, 100); 
    } 
} 

если вам нужен диалог, чтобы блокировать родитель, используйте super(parentFrame, true);

+0

Думаю, я знаю, в чем проблема. Это меньшее окно является Jpanel, однако ive сделал его в другом классе и расширил его JDialog. 'общественный класс FunkcjeMatematyczne расширяет javax.swing.JDialog' , что я не сделал, и то, что я не знаю, как сделать это, как это сделать: ' диалог = новый JDialog (frame_owner); ' , что это установить владельца диалога. Это даже возможно в расширенном классе ..? – Tomasz

+0

Вы можете сделать это в расширенном классе с помощью 'super (parentFrame):' Я отредактирую свой ответ, чтобы включить это ... – Ubica

+0

Когда я помещал этот супер (Okno_Glowne); 'в конструктор моего расширенного класса JDialog, тогда я получить сообщение "не может ссылаться на Okno_Glowne до того, как был создан конструктор супертипа". Ps. Okno_Glowne является расширением JFrame ... – Tomasz

1

Вместо создания двух JFrames создайте JFrame для вашего главного окна и создайте все другие окна как немодальные JDialogs, а JFrame - их владельцем. Это приведет к их укладке в виде отдельной группы; всякий раз, когда пользователь приносит один на передний план, все они выводятся на передний план.

+0

Меньшее окно - JDialog. – Tomasz

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