2014-12-26 1 views
0

В этом коде я пытаюсь закрыть окно, когда я нажимаю кнопку скрыть. Нажатие кнопки активирует метод makeHidden(), который у меня есть, но он выполнен на том же уровне, что и public static void main(String[] args), и именно там отображается видимость окна. Я не могу ссылаться на myWindow от метода makeHidden, и я не знаю, что положить поставить перед myWindow.setVisability(); сделать это ссылаться на него.)Как я могу сделать метод скрыть окно, которое настроено по отдельному методу

Я не могу понять это, и нуждаются в помощи.

import java.awt.*; 
import java.awt.event.*; 

public class Main extends Frame implements WindowListener,ActionListener { 
    /** 
* 
*/ 
private static final long serialVersionUID = 1L; 
    Label text = new Label("not Posted"); 
    Button authentweet, hide; 

    final static String newline = "\n"; 

    public static void main(String[] args) { 
      Main myWindow = new Main("TwitterBot"); 
      myWindow.setSize(350,100); 
      myWindow.setVisible(true); 
    } 

    public void makeHidden() { 
     //this is where i want to make the window hide 
    } 
    public Main(String title) { 

      super(title); 
      setLayout(new FlowLayout()); 
      addWindowListener(this); 
      authentweet = new Button("Make Post"); 
      hide = new Button("Hide"); 
      add(authentweet); 
      add(text); 
      add(hide); 
      authentweet.addActionListener(this); 
      hide.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == authentweet) 
     { 
      TwitterPost.makepost(); 
      text.setText("Posted"); 
     } 
     if (e.getSource() == hide) 
     { 
      makeHidden(); 
     } 


    } 

    public void windowClosing(WindowEvent e) {System.exit(0);} 
    public void windowOpened(WindowEvent e) {} 
    public void windowActivated(WindowEvent e) {} 
    public void windowIconified(WindowEvent e) {} 
    public void windowDeiconified(WindowEvent e) {} 
    public void windowDeactivated(WindowEvent e) {} 
    public void windowClosed(WindowEvent e) {} 

} 
+1

Просто используйте 'SetVisible (ложь)' без какой-либо ссылки на объект или использовать 'this' (например,' this.setVisible (ложь) ') , – initramfs

+0

yep .. это сработало .. спасибо, я не ожидал, что это будет ТОТ просто – user1896414

+0

@CPUTerminator, Это считается ответом, а не комментарием –

ответ

1

Ответ на комплектность.

Использование методов из класса-оболочки не требует ссылки на объект. Учитывая, что ваш класс наследуется от Frame, вы автоматически получаете все не частные методы из фрейма, включая setVisible().

В некоторых случаях, однако, вам может потребоваться ссылка на текущий объект, в котором должно использоваться ключевое слово this. Ссылки на суперкласс должны быть сделаны с помощью ключевого слова super.

В вашем случае, определяя ваш метод makeHidden() должен идти как:

public void makeHidden() { 
    // Either 
    setVisible(false); 
    // Or 
    this.setVisible(false); 
    // Given you haven't overridden the superclass method, this too: 
    super.setVisible(false); 
} 
Смежные вопросы