2012-09-27 1 views
0

У меня есть class main extends jframe, у него есть кнопка, которая вызывает/показывает другой класс, который расширяет jdialog.Как вызвать активный кадр, который уже существует из другого класса, который расширяет JDialog, а затем удалить весь его компонент?

Если кнопка из jdialog запущена, она будет удалять этот диалог и удалит весь компонент jframe, а затем добавит его в новый jpanel.

Что мне делать?

Вот мой новый сломанный код:

public class mainz extends JFrame{ 
mainz(){ 
    setVisible(true); 
    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

    JToolBar r = new JToolBar(); 
    r.add(Box.createHorizontalGlue()); 
    add(r, BorderLayout.NORTH); 

    JButton n = new JButton(); 
    r.add(n, BorderLayout.EAST); 

    n.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent ae){ 
      show(); 
     } 
    }); 
} 

public void show(){ 
    dialogz d = new dialogz(this); 
    d.setVisible(true); 
} 

public void lastHope(){ 
    getContentPane().removeAll(); 
    getContentPane().validate(); 
    getContentPane().repaint(); 
} 

public static void main (String[]args){ 
    new mainz().setExtendedState(MAXIMIZED_BOTH); 
} 

}

public class dialogz extends JDialog{ 
public dialogz(final mainz owner) { 
    setSize(300, 300); 
    JButton n = new JButton("execute"); 
    add(n); 

    final JFrame ew = (JFrame)super.getOwner();// << 

    n.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent ae){ 
      dispose(); 
      //owner.lastHope; 
      ew.removeAll();// << 
      ew.validate();// << 
      ew.repaint();// << 
     } 
    }); 
} 

void yes(){ 
    getOwner().removeAll(); 

    getOwner().validate(); 
    getOwner().repaint(); 
} 

}

Я знаю, что могу предотвратить мой main класс от расширения jframe, и вызвать его из основной вместо , но я хочу сделать это так ...

Пожалуйста, помогите мне ... TT

Извините за мой английский, я из далекой страны ~ ~»

обновление: ошибка

java.lang.ClassCastException: javax. swing.SwingUtilities $ SharedOwnerFrame не может быть приведен к javax.swing.JFrame

это будет сделано с удаления строки, которые содержат // < < затем вызвать lastHope();

, но я думаю, что есть еще один способ получить, что существующее JFrame в RemoveAll (литье его первым или что-то ~ ~»)

+0

removeAll() метод - это то, что вы ищете – slackmart

+0

@sgmart: кратко глядя на его код выше, похоже, что он уже знает об этом методе. –

+0

Хорошо, спасибо, это правильно. Я работаю над решением! – slackmart

ответ

2

Вы звоните getParent(), но вы никогда не устанавливаете родителя (или владельца). Это должно произойти в конструкторе, как уже указывалось. Также помните, что getParent() возвращает объект Container, а getOwner() возвращает объект Window. Оба они относятся к JFrame, который является родителем и владельцем. Если вы хотите использовать его как JFrame, вам нужно будет отобразить вывод как (JFrame). Но removeAll() находится в классе Container, поэтому, если это все, что вам нужно, не нужно будет кастинга.

Update:

JFrame frame = new JFrame(); 
JDialog dialog = new JDialog(frame);//frame is owner 

JFrame parentOfDialog = (JFrame)(dialog.getParent()); 
//OR 
//JFrame parentOfDialog = (JFrame)(dialog.getOwner()); 
parentOfDialog.removeAll(); 

Если вы используете свой собственный класс, передать JFrame в конструкторе и вызвать super.

Пожалуйста, прочтите javadoc на JDialog, прежде чем пытаться его использовать. Кроме того, читайте больше о наследовании.

+0

, как его отличить, чем удалить все компоненты? (im глупый ребенок, который только что родился ~, ~ я не знаю java для многих) JFrame e = (JFrame) this.getOwner(); e.removeAll(); e.repaint(); e.validate(); получил ошибку = javax.swing.SwingUtilities $ SharedOwnerFrame не может быть отброшен в javax.swing.JFrame .... , если я использую getParent() в классе dialogz extends Jdialog, он возвращает jdialog it self ?? Я хочу, чтобы он возвращал существующий jframe T-T –

+0

Вы указали «владелец» при создании диалога? Опубликуйте обновленный код (в формате кода), чтобы мы могли помочь. – davidXYZ

+0

no ,, i do not .. n Я не знаю, как это сделать T-T –

2

Я не совсем уверен, что ваша цель, но если вы хотите для изменения компонентов, отображаемых в контейнере, таких как панель содержимого JFrame или JDialog, я рекомендую вам использовать CardLayout, чтобы сделать это, так как он позволяет легко менять «виды».

Может быть два способа для этого:

  • Yo ur Класс JDialog может использовать ссылку на JFrame, которая передается через его конструктор (и вы должны немедленно передать его в конструктор super диалогового окна, чтобы ваша модальность работала правильно). Затем вы можете вызвать любые общедоступные методы в классе JFrame.
  • Или, поскольку JDialog является модальным, код JFrame будет остановлен, пока диалог будет виден. Вы можете поменять «взгляды» сразу после того, как диалог был удален и больше не отображается. это сохранит JFrame, управляющий кодом в классе JFrame.
  • Редактировать: обратите внимание, что если вы не используете CardLayout, вы несете ответственность за вызов revalidate() и repaint() в любом контейнере, который получает свои компоненты.

В стороне: поскольку английский не является вашим первым языком и не является родным языком многих людей на этом форуме, пожалуйста, избегайте использования нестандартных сокращений. Чем яснее ваше общение с нами, тем легче нам понять вас и помочь вам.

+0

i вид человека, который урод из отражения в java, если я использую макет карты ... (я до сих пор не знаю, как , но я считаю, что размышление можно свести с ума к моему коду, если some1 играет его в моем коде) ... в любом случае я хочу использовать память немного, как можно ... Как использовать ссылку моего основного класса? // код в диалоговом классе. main m = new main(); // или ... main m; его содержат ошибки ... я был использовать Validate(), перепроверить, перекрасить(), пакет() в моем почтовом коде ... , но он по-прежнему ошибки им новичок глупый Java программист .. Я просто хочу, чтобы метод вызывал Jframe (класс main extends jframe), который уже существует и видим из другого класса –

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