Avatar billede preet Nybegynder
09. november 2004 - 12:39 Der er 36 kommentarer og
1 løsning

Nyt vindue skal deaktivere gammel vindue

I min applet kan man vha. en knap åbne et nyt vindue. I den forbindelse ønsker jeg, at selve appletten skal blive "låst", sådan at man ikke kan operere på det mens vinduet er åbent. Ligesom når man f.eks. i IE trykker funkioner -> internetindstillinger.

Svar gerne med eksempler, da jeg ikke er helt stærk i java
Avatar billede kalp Novice
09. november 2004 - 12:52 #1
kan du ikke skrive at når dit nye vindue hopper op (et event)
så skal din frame.. den første ikke være activ?

  this.isActive(false)

this = navnet på din hovedframe
Avatar billede kalp Novice
09. november 2004 - 12:53 #2
to sekunder.. den virker nok ikke
Avatar billede kalp Novice
09. november 2004 - 12:56 #3
måske er det enable du skal sætte til false
Avatar billede kalp Novice
09. november 2004 - 12:58 #4
når det nye vindue åbne skal du sætte din hovedframe til enable false!
når det lukker igen skal du sætte den til enable true!
Avatar billede kalp Novice
09. november 2004 - 12:58 #5
this.setEnabled(false);
Avatar billede kalp Novice
09. november 2004 - 13:00 #6
du kan evt lave noget kode der hedder noget lignende

if(DinNyeFrame.setVisible(true))
this.setEnabled(false);
else if(DinNyeFrame.setVisible(false))
this.setEnabled(true);
Avatar billede preet Nybegynder
09. november 2004 - 13:13 #7
Hmm... Jeg kan få den til at blive deaktiveret - men jeg kan ikke helt regne ud, hvor dit kodeeksempel skal placeres, sådan at den atter kan blive aktiv.
Du kan se hvordan jeg åbner det nye vindue her:
  void OpenPanel_actionPerformed(ActionEvent e) {
    final Panel panelWindow = new Panel(reader_ip, port);
    JFrame frame2 = new JFrame("ITC-1 Panel");
    this.setEnabled(false);
    frame2.getContentPane().add(panelWindow);
    frame2.setSize(465, 253);
    frame2.setResizable(false);
    panelWindow.init();
    panelWindow.start();
    frame2.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        panelWindow.disconnect();
      }
    }); 
    frame2.setVisible(true);
  }

Og er der noget metode for at undgå at hovedvinduet overhovedet kan komme i fokus - altså sådan at det nyåbnede vindue altid være på toppen af det andet?
Avatar billede kalp Novice
09. november 2004 - 13:17 #8
laver lige et eksempel til dig
Avatar billede preet Nybegynder
09. november 2004 - 13:18 #9
Alle tiders!
Avatar billede kalp Novice
09. november 2004 - 13:31 #10
så er der om lidt... skal bare lige gør så den bliver aktiv igen når man lukker for det nye vindue!
Avatar billede kalp Novice
09. november 2004 - 13:35 #11
kopier lige dem her ind en af gangen og test .. der kommer 3

package mypackage;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.UIManager;
import java.awt.Dimension;
import java.awt.Toolkit;

public class Application1
{
  public Application1()
  {
    Frame frame = new Frame1();
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height)
    {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width)
    {
      frameSize.width = screenSize.width;
    }
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    frame.addWindowListener(new WindowAdapter()
      {
        public void windowClosing(WindowEvent e)
        {
          System.exit(0);
        }
      });
    frame.setVisible(true);
  }

  /**
  *
  * @param args
  */
  public static void main(String[] args)
  {
    try
    {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

    new Application1();
  }
}
Avatar billede kalp Novice
09. november 2004 - 13:36 #12
package mypackage;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Frame1 extends JFrame
{
  private JButton jButton1 = new JButton();
  private Frame2 nyframe;
  public Frame1()
  {
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(400, 300));
    jButton1.setText("jButton1");
    nyframe = new Frame2();
    jButton1.setBounds(new Rectangle(155, 115, 73, 23));
    jButton1.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          jButton1_actionPerformed(e);
        }
      });
    this.getContentPane().add(jButton1, null);
  }

  private void jButton1_actionPerformed(ActionEvent e)
  {
  nyframe.setVisible(true);
  int i = 0;
  if (i == 0)
  this.enable(false);
  }
}
Avatar billede kalp Novice
09. november 2004 - 13:36 #13
package mypackage;
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.FlowLayout;

public class Frame2 extends JFrame
{
  private FlowLayout flowLayout1 = new FlowLayout();
  private Frame1 frameigen;
  public Frame2()
  {
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    frameigen = new Frame1();
    this.getContentPane().setLayout(flowLayout1);
    this.setSize(new Dimension(400, 300));
    this.setVisible(false);
 
  }
}
Avatar billede kalp Novice
09. november 2004 - 13:36 #14
mangler lige at gøre den aktiv igen når du lukker vinduet.. men se om det er det der du gerne vil have
Avatar billede kalp Novice
09. november 2004 - 13:39 #15
rettelse til den her.. ellers virker det vist ikke

package mypackage;
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.FlowLayout;

public class Frame2 extends JFrame
{
  private FlowLayout flowLayout1 = new FlowLayout();

  public Frame2()
  {
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {

    this.getContentPane().setLayout(flowLayout1);
    this.setSize(new Dimension(400, 300));
    this.setVisible(false);
 
  }
}
Avatar billede mikkelbm Nybegynder
09. november 2004 - 18:16 #16
Var det ikke en del nemmere, at lave en JOptionPane og fylde sit eget panel ind i den!? En JOptionPane er som default modal, det vil sige at den blokere det bagvedliggende...

Eksempel:

JPanel panel = new JPanel();
Object[] options = new String[]{"Ok"};
       
JOptionPane.showOptionDialog(this, panel, "Whatever", JOptionPane.OK_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);


Og "panel" kan være et JPanel, som du selv har fyldt textboxe og alt muligt andet ind i?
Avatar billede mikkelbm Nybegynder
09. november 2004 - 18:21 #17
Læs eventuelt mere om Dialogs og JOptionPane her:

http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html
Avatar billede kalp Novice
09. november 2004 - 20:29 #18
mikkelbm:

så ryger effekten vel..det med en popup hvor de vindue bagved bliver inactivt... som han beskrev i IE
Avatar billede mikkelbm Nybegynder
09. november 2004 - 20:52 #19
En JOptionPane gør nøjagtig det han gerne vil.

Når man kalder en JOptionPane "låser" den resten af applikationen/appletten!

Og det er vel det han vil!?
Avatar billede kalp Novice
09. november 2004 - 22:38 #20
Mikkel... yepsen!

meeeen... jeg gjorde det så uden brug af komponenter:o)
Avatar billede preet Nybegynder
10. november 2004 - 09:06 #21
Hej begge to,

Jeg tog tidlig fri i går og er først kommet retur til eksperten nu - sikke mange svar - tak for det :)
Jeg kigger dem lige igennem her i løbet af formiddagen, og ser om jeg kan få det til at virke.

Hilsen Peter
Avatar billede preet Nybegynder
10. november 2004 - 11:04 #22
Hej begge to,

Jeg har fundet en alternativ løsning, der opfylder mine behov.
Jeg sætter alle knapper på hovedsiden til enabled=false når vinduet åbnes og til true når det lukkes. Jeg har været kraftig inspireret af kalp så du får pointene... Tak
Avatar billede kalp Novice
10. november 2004 - 11:08 #23
preet:

Tak skal du have! af en eller anden grund gad min ikke sætte vinduet tilbage til enabled når det nye blev lukket! og prøvede ellers i 2 timer hehe og lavede projektet om ... men glad for du fik løst din problemstilling:)
Avatar billede mikkelbm Nybegynder
10. november 2004 - 14:17 #24
Fint at du har fået det til at virke...

Men! Det kan gøres meget mere simpelt ved brug af JOptionPane - blot min erfaring.
Avatar billede kalp Novice
11. november 2004 - 20:22 #25
Mikkelbm:

måske er det lettere men måske passer den løsning ham ikke.

preet:

jeg fandt ud af mit kodeeksempel... lidt kluder med kendskabet hehe men nu virker koden! tak for point forresten! og du kan evt teste det nu.. frame1 åbner frame 2 og så kan man ikke bruge frame1 mere før frame 2 bliver lukket..




package mypackage;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.UIManager;
import java.awt.Dimension;
import java.awt.Toolkit;

public class Application1
{
  public Application1()
  {
 
    Frame frame = new Frame1();
   
   
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    if (frameSize.height > screenSize.height)
    {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width)
    {
      frameSize.width = screenSize.width;
    }
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    frame.addWindowListener(new WindowAdapter()
      {
        public void windowClosing(WindowEvent e)
        {
          System.exit(0);
        }
      });
    frame.setVisible(true);
  }

  /**
  *
  * @param args
  */
  public static void main(String[] args)
  {
    try
    {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

    new Application1();
  }
}















package mypackage;
import com.sun.media.sound.Toolkit;
import java.awt.Frame;
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;


public class Frame1 extends JFrame
{

  private JButton jButton1 = new JButton();
Frame frame2 = new Frame2(this);

  public Frame1()
  {
 
    try
    {
      jbInit();
     
   
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
 
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(400, 300));

    jButton1.setText("Åben nyt vindue");
    jButton1.setBounds(new Rectangle(95, 70, 205, 110));
    jButton1.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          jButton1_actionPerformed(e);
        }
      });
    this.getContentPane().add(jButton1, null);
  }

  private void jButton1_actionPerformed(ActionEvent e)
  {
  frame2.setVisible(true);
  this.disable();
  }


}













package mypackage;
import java.awt.Dimension;
import java.awt.Frame;
import javax.swing.JFrame;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;



public class Frame2 extends JFrame
{
Frame1 frame;


  public Frame2(Frame1 a)
  {
  frame = a;

    try
    {
      jbInit();
   
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

  }

  private void jbInit() throws Exception
  {
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(400, 300));
    this.setVisible(false);
    this.addWindowListener(new java.awt.event.WindowAdapter()
      {
        public void windowClosing(WindowEvent e)
        {
          this_windowClosing(e);
        }
      });

  }
  private void this_windowClosing(WindowEvent e)
  {
  frame.enable();
  }


}
Avatar billede mikkelbm Nybegynder
12. november 2004 - 03:33 #26
Hehe, nej! Det kan da godt være løsningen ikke passer ham! MEN:

Citat:
"I den forbindelse ønsker jeg, at selve appletten skal blive "låst", sådan at man ikke kan operere på det mens vinduet er åbent. Ligesom når man f.eks. i IE trykker funkioner -> internetindstillinger. "


Det er nøjagtigt hvad en JOptionPane gør. Hverken mere eller mindre!!!

Ingen grund til endnu engang at opfinde den dybe tallerken! Blot min mening...
Avatar billede kalp Novice
12. november 2004 - 08:41 #27
Mikkelbm

mit forslag fylder mindre i koden end JOptionPane
Avatar billede preet Nybegynder
12. november 2004 - 09:07 #28
Hej begge to,

Må nok sige i er aktive selvom spørgsmålet er lukket. Det er rigtigt at jeg ønskede at vinduet blev låst, men den løsning jeg selv fandt frem til gør ikke helt det - så er gået lidt på kompromis.

Jeg er lidt i tvivl om hvordan det JOptionPane fungerer - de vinduer jeg åbner er ret komplekse, idet det ene simulerer et panel på forsiden af den enhed, jeg programmerer til, og det andet er en Terminal. Kan det lade sig gøre at proppe det i et JOptionPane?

Inden I begge programmerer videre for min skyld, skal det dog lige tilføjes at jeg nok holder mig til min løsning, da jeg er lidt under tidspres, men at jeg blot ønsker at få stillet min nysgerrighed... :)

Peter
Avatar billede mikkelbm Nybegynder
12. november 2004 - 13:50 #29
Har du et panel med alle dine komponenter på, fylder en JOptionPane 2-3 linjer!!!

...
Object[] options = new String[]{"Ok"};
       
JOptionPane.showOptionDialog(owner, panel, "Whatever", JOptionPane.OK_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
...


Så det med at koden fylder mindre holder da absolut ikke!

Og ja, man kan fylde alt ind i en JOptionPane.
Avatar billede mikkelbm Nybegynder
12. november 2004 - 13:51 #30
"Så det med at koden fylder mindre holder da absolut ikke!"

var kommentar til 'kalp'
Avatar billede mikkelbm Nybegynder
12. november 2004 - 13:52 #31
Et komplet og køreklart eksempel:

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

public class Test extends JApplet
{   
    private JButton push_me = new JButton("Tryk på mig");

    public Test()
    {
        setSize(400, 400);
       
        push_me.addActionListener(new ActionListener()
        {
            public void actionPerformed (ActionEvent e)
            {
                // Nedenstående er det eneste der er nødvendigt!!!
                Object[] options = new String[]{"Ok"};
                MyPanel panel = new MyPanel();
                               
                JOptionPane.showOptionDialog(Test.this, panel, "Se Mit Panel", JOptionPane.OK_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
            }
        });
       
        this.getContentPane().add(push_me, BorderLayout.NORTH);
    }   
   
    public static void main(String[] args)
    {
        JFrame f = new JFrame();
        f.getContentPane().add(new Test(), BorderLayout.CENTER);
        f.setVisible(true);
    }
}

// Dit eget panel med alle de komponenter du nu har lyst til
class MyPanel extends JPanel
{
    private JButton button = new JButton("Bla bla");
    private JRadioButton rb1 = new JRadioButton("Test1");
    private JRadioButton rb2 = new JRadioButton("Test2");
    private JRadioButton rb3 = new JRadioButton("Test3");
    private ButtonGroup group = new ButtonGroup();
   
    public MyPanel()
    {
        group.add(rb1);
        group.add(rb2);
        group.add(rb3);
       
        this.setLayout(new BorderLayout());
        this.add(button, BorderLayout.NORTH);   
       
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed (ActionEvent e)
            {
                JOptionPane.showMessageDialog(MyPanel.this, "Endnu en optionpane");
            }
        });
       
        JPanel temp = new JPanel(new GridLayout(3, 1));
        temp.add(rb1);
        temp.add(rb2);
        temp.add(rb3);
       
        this.add(temp, BorderLayout.CENTER);
    }
}
Avatar billede mikkelbm Nybegynder
15. december 2004 - 01:39 #32
Jeg ved ikke om jeg kan fange dig her, kalp.

Jeg er bedøvende ligeglad med point, hvis ikke spørger kan bruge mit svar!

Du er glad for at hjælpe og det er fint - det er det Eksperten går ud på!
Dog synes jeg bare at dine svar mange gange forvirre mere end de gavner, derfor gav jeg dig den karma. I starten gav jeg dig faktisk en god karme pga. din iver for at hjælpe, men jo flere indlæg det blev til jo mere forvirrende blev det.

At du så synes at du skal hævne dig og give mig dårlig karma, viser vel en hel del om dig som person. Og det afspejler sig så også i dine færdigheder bla. inden for programmering!

preet:
Beklager at jeg roder op i denne tråd, men det var den der blev henvist til.
Avatar billede kalp Novice
15. december 2004 - 12:24 #33
Det viser overhovedet intet om mig som person. Jeg har svaret på en del Java spørgsmål og ja selvfølgelig prøver jeg at svare på spørgsmål i Java katagorien selv om jeg ikke har prøvet at løse sådan et problem før... ligesom her i dette spørgsmål fordi jeg havde en ide til hvordan det kunne gøres. Som jeg siger har jeg programmeret Java under 3måneder så det helt sikkert at jeg vil misforstå visse spørgsmål fordi jeg tror spørgeren mener noget men det så viser sig han mener noget helt andet... det skyldes selvfølgelig jeg ikke er nået til det område i mit programmering niveau, men kan tryste dig med jeg bliver bedre og bedre på for hver dag.

Du velkommen til at henvise til de Java spørgsmål jeg har svaret blankt på for kan slet ikke forestille mig det er så mange. Jeg kom kun i tanker om dette spørgsmål fordi der var lidt uenighed om hvad de fylder mest om mindst..

Da dette spørgsmål blev oprettet kendte jeg ikke til JOptionPane.

Men mener stadig det fylder mere en mit forslag.. siger ikke man skal skrive mere kode hvis man skal anvende en JOptionPane, men der må stå en hel del kode i en JOptionPane.
Avatar billede mikkelbm Nybegynder
15. december 2004 - 13:35 #34
Jeg har fjernet min karmatildeling til dig - så kan du tænke/mene om det hvad du vil. Men jeg gider ikke det her ordkløveri!

Jeg mener stadig det er fint, at du gerne vil hjælpe - det eneste jeg prøver at sige, er at det er en god idé, at finde ud af hvad spørger egentlig spørger om og har brug for, inden man smider løsninger.

---
Og mht. JOptionPane så synes jeg bestemt, at man skal gøre brug af de komponenter udviklerne på Sun har lavet til samme formål. Mon ikke de kan tryne både dig og mig rimelig hurtigt rent programmeringsmæssigt ? :)
Avatar billede kalp Novice
15. december 2004 - 13:44 #35
Hvordan kan det være du ikke er ligeglad med karma når du er ligeglad med point? Bare nysgerrig!

Og med hensyn til brug af Sun's komponenter så husk på JFrame også er udviklet er sun's folk og jeg udnyttede bare funktionerne i JFrame... (enable/disable)
og det vel også okay?

men angående min deltagelse på eksperten under Java katagorien vil jeg fortsat svare på spørgsmål, men kan prøve at undgå visse spørgsmål fremover(foreløbigt) og så kan du jo vurdere min Java nivea senere for det kan som sagt kun blive bedre!
Avatar billede mikkelbm Nybegynder
15. december 2004 - 13:48 #36
Jeg burde egentlig også, og er det også som regel, være ligeglad med karma. Det eneste der slog mig, var at det var en hævnagt og ikke en vurdering af min færden her på Eksperten.



Og så en sidste ting - prøv at kør det eksempel jeg lavede, så er jeg næsten sikker på, at du vil gi' mig ret mht. JOptionPane... :)
Avatar billede kalp Novice
15. december 2004 - 14:12 #37
Har prøvet(i dit eksempel mangler du dog at sætte en størrelse på første frame) og det virker fint nok, men man kan sige begge eksempler virker som de skal. Jeg synes hverken en JOptionPane var svære eller nemmere at anvende en min forslag, men du siger i din kommentar: mikkelbm
12/11-2004 13:50:46 at der ikke er nogen grund til at opfinde den dybe tallerken og det har du ret i, men synes ikke jeg opfundet noget så god er jeg slet ikke endnu. Gjorde bare brug af 2 metoder i JFrame:) Men lad os lade det ligge ved det... dit forslag var gyldigt og mit også... selv om spørgeren kom frem til en løsning delvist selv med sin egen løsning hehe
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