Avatar billede the_ghost Nybegynder
27. november 2003 - 14:57 Der er 10 kommentarer og
1 løsning

Lukning med bekræftelse.

Jeg har lavet et lille program, og jeg vil gerne have at når man trykker på "krydset" øverst i højre hjørne så kommer der en dialog box frem og spørger om man er sikker på at man vil lukke eller ej.
Hvis der bliver trykket på "Yes" skal programmer selvfølgelig terminere fuldstændig, men hvis der bliver trykket på "No" skal der ikke ske noget.

Jeg har denne kode:
import java.awt.event.*;
import javax.swing.*;

class ApplicationTerminator extends WindowAdapter
{
    public void windowClosing( WindowEvent e )
  {
      int response = JOptionPane.showConfirmDialog(null,
        "Are you sure you want to exit?", "Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE );
    if (response == JOptionPane.YES_OPTION)
    {
        System.exit( 0 );
    }
    else if(response == JOptionPane.NO_OPTION)
    {
        System.out.println("Det blev sagt NEJ!!!");
    }
  }
}

Når jeg nu trykker på "Yes" lukker det hele som det skal, men når jeg trykker på "No" lukker mit program stadigvæk, samt jvm bliver kørende...

Er der nogen der kan hjælpe mig med mit lille problem vil jeg blive meget glad!!!
Avatar billede mikkelbm Nybegynder
27. november 2003 - 15:12 #1
Den her lille stump kode gør det du efterspørger:

import javax.swing.*;
import javax.swing.JDialog;
import java.awt.event.*;
import java.util.*;

public class Test extends JFrame {

Test()
{
  setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

  addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {

    int n = JOptionPane.showConfirmDialog(
      e.getWindow(),
      "Would you like to close this window",
      "Window closer",
    JOptionPane.YES_NO_CANCEL_OPTION);

    if(n == JOptionPane.YES_OPTION) {
      dispose();
      System.exit(0);
    }
    }
  });

  setTitle("Try to close me.");
  setSize(500,300);
  show();
}

public static void main(String args[])
{
  Test c = new Test();
}
}
Avatar billede the_ghost Nybegynder
27. november 2003 - 15:22 #2
Jeg får denne fejl, når jeg prøver at køre dit program...
Exception in thread "main" Process Exit
Avatar billede the_ghost Nybegynder
27. november 2003 - 15:29 #3
Det virker fint... mit problem!!!

Kan det ikke lade sig gøre at lave det på en anden måde end ved nesting???

problemet er at der er noget skolearbejde, men lige netop dette er noget jeg bare sidder og leger med, men hvis jeg aflevere det med dit forslag, bliver min lære ikke glad da vi helst ikke skal bruge noget vi ikke har lært endnu...
Avatar billede the_ghost Nybegynder
27. november 2003 - 15:47 #4
Jeg kan heller ikke få det til at fungere hvis jeg sætte din kode ind i min...
så kommer denne fejl:

addWindowListener(java.awt.event.WindowListener) in java.awt.Window cannot be applied to (<anonymous WindowAdapter>)
    addWindowListener(new WindowAdapter()

... og jeg har copy pasted det ind
Avatar billede mikkelbm Nybegynder
27. november 2003 - 15:57 #5
hvad hvis du nøjes med at sætte den her linje:

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

ind i din JFrame. Og så derefter tilføjer din klasse?
Avatar billede mikkelbm Nybegynder
27. november 2003 - 16:05 #6
Med udgangspunkt i din egen klasse har jeg lavet dette eksempel:

import java.awt.event.*;
import javax.swing.*;

class Test extends WindowAdapter
{
    public void windowClosing( WindowEvent e )
      {
          int response = JOptionPane.showConfirmDialog(null,
        "Are you sure you want to exit?", "Are you sure?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE );
        if (response == JOptionPane.YES_OPTION)
        {
            System.exit( 0 );
        }
        else if(response == JOptionPane.NO_OPTION)
        {
            System.out.println("Det blev sagt NEJ!!!");
        }
      }

    public static void main(String[] args)
    {
        JFrame f = new JFrame();
        f.setSize(200,200);
        f.setDefaultCloseOperation(f.DO_NOTHING_ON_CLOSE);
        f.show();
        f.addWindowListener(new Test());
    }
}

Og det virker efter hensigten...
Avatar billede mikkelbm Nybegynder
27. november 2003 - 16:06 #7
Hov. Jeg er kommet til at ændre klassenavnet, men ellers skulle det være det samme...
Avatar billede the_ghost Nybegynder
27. november 2003 - 16:14 #8
addWindowListener(java.awt.event.WindowListener) in java.awt.Window cannot be applied to (ApplicationTerminator)

        f.addWindowListener(new ApplicationTerminator());
Avatar billede mikkelbm Nybegynder
27. november 2003 - 16:20 #9
må jeg prøve at se lidt mere kode? evt. hvordan du har lavet din JFrame - constructor?
Avatar billede the_ghost Nybegynder
27. november 2003 - 16:20 #10
Nu virker det... tak for hjælpen... den sidste fejl skal du se bort fra da det var min IDE der fuckede up... jeg genstartede den og så virkede det...
Avatar billede mikkelbm Nybegynder
27. november 2003 - 16:21 #11
Alletiders :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester