Avatar billede coolfisk Nybegynder
22. november 2003 - 20:36 Der er 18 kommentarer

domodal Frame

Du kan se hvad jeg har skrevet... og måske hjælpe mig med hvordan jeg gør det til en doModal. Mit problem er nemlig at når jeg åbner window'et login, så kører den stadig videre i koden... vil sige modaless & udskriver System.out.print("efter login");... vil gerne havde den udfører login'ets kommadoer først.


Har applikations klassen:

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

public class Application1 {
  boolean packFrame = false;
  static Frame1 me;

  //Construct the application
  public Application1() {
  }
  //Main method
  public static void main(String[] args) {
  // new Application1();
    System.out.println("main i app");
    me = new Frame1();
    me.show();

  }
}

som åbner min Frame1, som er min main.

I den har jeg en knap der skal åbne et ny window, hvor man skal indtaste login. Dette window skal være doModal.

knap funktionen ser således ud:

void login_actionPerformed(ActionEvent e) {
    System.out.println("trykket på Login!");
    log.setVisible(true);
   
    System.out.print("efter login");
  }

har oppe i constructeren defineret:

Login log = new Login();

Som åbner den på heapen. Hvad skal jeg gøre anderledes?
Avatar billede arne_v Ekspert
22. november 2003 - 20:39 #1
Hvis du bruger en JDialog kan du åbne den modalt.
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:41 #2
hvordan?
Avatar billede arne_v Ekspert
22. november 2003 - 20:42 #3
Avatar billede soreno Praktikant
22. november 2003 - 20:42 #4
Som jeg postede i dit andet spørgsmål:

Prøv at kigge lidt på dette eksempel:

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

public class SwingTest extends JFrame implements ActionListener
{
    private int frameWidth = 640;
    private int frameHeight = 480;
    private JButton button;

    public SwingTest()
    {
        createFrame();
    }

    private void createFrame()
    {
        setTitle("TestKlasseSwing");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
        //components
        button = new JButton("Foobar");
        button.addActionListener(this);
        this.getContentPane().add(button, BorderLayout.SOUTH);

        //Center Frame
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setSize(new java.awt.Dimension(frameWidth, frameHeight));
        setLocation((screenSize.width - this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2);
    }

    public void actionPerformed(ActionEvent e)
    {
        new DialogTest(this);
    }

    public static void main(String args[])
    {
        new SwingTest().show();
    }
}

class DialogTest extends JDialog
{
    public DialogTest(Frame f)
    {
        super(f, "DialogTest", true);
        setSize(200, 200);
        getContentPane().add(new JLabel("Exit med x i øverste højre hjørne!"));
        show();
    }
}
Avatar billede arne_v Ekspert
22. november 2003 - 20:46 #5
Avatar billede arne_v Ekspert
22. november 2003 - 20:53 #6
Hvis du vil have noget meget meget nemt så bruger du:

String username = JOptionPane.showInputDialog(this, "Indtast brugernavn");

Den er modal !
Avatar billede arne_v Ekspert
22. november 2003 - 20:54 #7
(hvsi brugeren canceler returnerer den null)
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:54 #8
ok det prøver jeg lige at lege med... har jeg givet pointene?
Avatar billede soreno Praktikant
22. november 2003 - 20:54 #9
Man kan faktisk lave mange spændende ting med de indbyggede dialoger.

Men det står jo også i det første af Arnes links.

Mit eksempel er til hvis du ønsker at lave din egen dialog fra bunden.
Avatar billede soreno Praktikant
22. november 2003 - 20:58 #10
Du kan give point til de brugere der har lagt et svar.

Ingen af os har lagt et svar endnu.

Nu lægger jeg et svar og når Arne også lægger et svar kan du fordele points mellem os.

Du kan kun give point én gang, derfor bør du vente til at relevante personer har givet et svar.
Avatar billede arne_v Ekspert
22. november 2003 - 20:58 #11
svar
Avatar billede coolfisk Nybegynder
22. november 2003 - 20:59 #12
prøver lige at lege med det....
Avatar billede coolfisk Nybegynder
22. november 2003 - 21:16 #13
soreno... i det ekseempel du har vist, hvordan får man så tilgang til hvis man har funktioner man skal kalde... eller hvis man har en variabel man skal bruge der fra?

Plejer at:
DialogTest test = new DialogTest;
test.KørDenFunktionDuVilHave;
Avatar billede soreno Praktikant
22. november 2003 - 21:20 #14
Du har jo adgang til foregående JFrame via konstruktøren til dialogen.

Men jeg synes det er lidt grimt at kalde metoder i en anden frame.
Avatar billede coolfisk Nybegynder
22. november 2003 - 21:29 #15
Det er i mit eget program jeg har implemteret det... konstruktørene til dialogen... kan du vise et eks? Hvis jeg nu havde en variabel i DialogTest... CheckLoginOk. Og vil hente den fra main klassen... hvordan henter jeg så funktionen?
Avatar billede coolfisk Nybegynder
22. november 2003 - 21:30 #16
arne prøv at gå ind på det gamle spørgsmål.... har lige noget jeg skal spørge om
Avatar billede soreno Praktikant
22. november 2003 - 21:33 #17
Øhhh, kunne du ikke bare returnere en værdi når dialogen afsluttes.

Som der er beskrevet i nogle af eksemplerne i første link.

Det er ikke godt design at tilgå variabler direkte i andre klasser.

Noget ala
MyDialog myDialog = new MyDialog(this);
int retVal = myDialog.login();
if(retVal == MyDialog.LOGIN_SUCCESS)
{
  //jubii :-)
}
else
{
  //det var ikke så godt :-(
}
Avatar billede arne_v Ekspert
11. december 2003 - 21:16 #18
Lukke tid ?
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