2017-03-14 1 views
0

Dies ist meine erste Frage, also bitte korrigieren Sie mich, wenn Fehler vorhanden sind.Ich habe einen Rahmen mit Panel in Java (Eclipse) gemacht, schließt die Anwendung nicht beim Drücken der Kreuztaste

Dies ist der Code, ich habe versucht, einen Rahmen mit einem Panel zu machen, aber die Anwendung wird nicht beendet, wenn Sie die Schließen-Taste drücken.

Als ich versuchte, den Standard-Schließvorgang zu beenden, zeigte es mir einen Fehler.

Also, bitte helfen Sie mir aus.

import java.awt.*; 

public class FramewithPanel { 

    private Frame f; 
    private Panel p; 

    public FramewithPanel(String title){ 
     f = new Frame(title); 
     p = new Panel(); 
    } 

    public void LaunchFrame() { 
     f.setSize(200,200); 
     f.setBackground(Color.blue); 
     f.setLayout(null); 

     p.setSize(100,100); 
     p.setBackground(Color.yellow); 

     f.add(p); 
     f.setVisible(true); 
    } 



    public static void main(String args[]) { 
     FramewithPanel guiWindow = 
      new FramewithPanel("Frame with Panel"); 

     guiWindow.LaunchFrame(); 
    } 
} 
+1

In Ihrer Frage sprechen Sie von einem Fehler. Es könnte nützlich sein, den Fehler/Stacktrace zu teilen. – Nrzonline

Antwort

0

Sehen, wie Sie erwähnt haben, dass Sie sich mit Frame eher als die Alternative JFrame hartnäckig sind, ist die einfachste Lösung hinzufügen ein WindowListener etwa so:

f.addWindowListener(new WindowAdapter() { 
    @Override 
    public void windowClosing(WindowEvent e) { 
     System.exit(0); 
    } 
}); 

Et v Oila!

+1

Vielen Dank für Ihre Antwort! –

1

Ich denke, man einen JFrame anstelle eines Frame verwenden möchten, wie ein Frame keinen Standardschließvorgang haben. Stattdessen wird es überhaupt nicht schließen, sondern nur WindowEvent vom Typ WINDOW_CLOSING erzeugen.

So würden Sie entweder tun

private JFrame f; 

// and in the constructor 
f = new JFrame(title); 
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 

oder

f = new Frame(title); 
f.addWindowListener(new WindowAdapter() { 

    @Override 
    public void windowClosing(WindowEvent e) { 
     f.dispose(); 
    } 

}); 
+0

Vielen Dank, aber ich weiß das bereits und ich wollte nur einen Frame verwenden. Ich glaube, dass Frame früher auch verwendet wurde, als der JFrame nicht da war. –

+0

@Sarthak Du hast vollkommen recht. Obwohl ich es im Allgemeinen nicht empfehle, können Sie natürlich auch einen 'Frame' verwenden. Der 'WindowListener' macht genau das gleiche wie' defaultCloseOperation'. Nur dass es zu einer etwas anderen Zeit aufgerufen wird, aber das ist in Ihrem Fall egal. – Izruo

+0

Vielen Dank, Kumpel! –

Verwandte Themen