Avatar billede thomas_fogh Nybegynder
02. december 2010 - 09:46 Der er 11 kommentarer og
1 løsning

popup i applet?

Hej,

Hvordan laver man et popup vindue i en applet?

Den skal indeholde et textarea, en progress bar og en OK knap (når progress er 100%).
Man skal ikke kunne flytte den og ikke kunne bruge knapper på min "normale" applet, imens den bliver vist.

Jeg har brugt nedenstående kode.
Er der en bedre måde?
Og hvordan disabler jeg min applet imens? (udover at skulle disable hver enkelt component)

/Thomas

[code]
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
panel.setSize(250, 250);
panel.setLayout(null);
NonSelectableTextArea progress_TA = new NonSelectableTextArea();
progress_TA.setBounds(0, 0, 250, 200);
progress_TA.setBackground(Color.RED);
panel.add(progress_TA);
JProgressBar progress_bar = new JProgressBar();
progress_bar.setBounds(0, 200, 250, 50);
progress_bar.setValue(25);
progress_bar.setStringPainted(true);
panel.add(progress_bar);
final Popup popup = PopupFactory.getSharedInstance().getPopup(comPorts_CB, panel, 100, 300);
popup.show();
[/code]
Avatar billede mcb2001 Nybegynder
02. december 2010 - 09:58 #1
hvis du ikke har behov for at vise din normale Applet mens den anden kører, så kunne du jo "bare" skifte ContentPane på din applet til dit nye Panel (gem den gamle til senere), vise den mens den kører, og når der trykkes OK, fjerner du dit panel og sætter den gamle contentpane ind?
Avatar billede thomas_fogh Nybegynder
02. december 2010 - 10:17 #2
Det har jeg overvejet, men jeg synes, at den anden måde er pænere... ;)
Avatar billede mcb2001 Nybegynder
02. december 2010 - 10:27 #3
du kan også lægge dit Panel ovenpå, og så sætter ocupacity lidt ned, så den virker gennemsigtig.
Avatar billede thomas_fogh Nybegynder
02. december 2010 - 11:29 #4
Jeg kan ikke få den til at være gennemsigtig:

[code]
JPanel panel = new JPanel();
panel.setBackground(new Color(250, 250, 250, 64));
panel.setSize(350, 300);
panel.setLayout(null);
panel.setOpaque(true);
NonSelectableTextArea progress_TA = new NonSelectableTextArea();
progress_TA.setBounds(50, 50, 300, 220);
progress_TA.setBackground(Color.LIGHT_GRAY);
progress_TA.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
panel.add(progress_TA);
JProgressBar progress_bar = new JProgressBar();
progress_bar.setBounds(50, 270, 300, 30);
progress_bar.setValue(25);
progress_bar.setStringPainted(true);
panel.add(progress_bar);
final Popup popup = PopupFactory.getSharedInstance().getPopup(getContentPane(), panel, 15, 300);
popup.show();
[/code]
Avatar billede thomas_fogh Nybegynder
02. december 2010 - 11:52 #5
Jeg har prøvet at tilføje et ekstra panel til sløring af min applet (efter ovenstående kode):
[code]
JPanel lpanel = new JPanel();
lpanel.setBackground(new Color(250, 250, 250, 128));
lpanel.setBounds(300, 10, 100, 100);
lpanel.setLayout(null);
lpanel.setOpaque(true);
getContentPane().add(lpanel);
getContentPane().setComponentZOrder(lpanel, 0);
[/code]
Det ser fint ud, indtil jeg bevæger musen over en af knapperne på min applet. Så bliver den gentegnet uden sløring, og jeg kan stadig trykke på den...
Avatar billede mcb2001 Nybegynder
02. december 2010 - 12:23 #6
Tja, det er vel selvfølgelig et problem.
Mener der er noget med at du kan disable en container. Er det ikke en mulighed?
Avatar billede arne_v Ekspert
02. december 2010 - 22:37 #7
Hjælper det at bruge en JDialog i.s.f. et JPanel?
Avatar billede arne_v Ekspert
03. december 2010 - 03:38 #8
Eksempel på hvad dialog gør:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class ModalApplet extends JApplet {
    public void init() {
        setLayout(new BorderLayout());
        getContentPane().add(new JLabel("Test af dialog"), BorderLayout.CENTER);
        JButton btn1 = new JButton("Åben dialog");
        btn1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JDialog dia = new JDialog((Frame)null, "Test", true);
                dia.setLayout(new BorderLayout());
                dia.add(new JLabel("Dette er dialogen"), BorderLayout.CENTER);
                JButton btn3 = new JButton("Test om dialog er aktiv");
                btn3.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        JOptionPane.showMessageDialog(null, "Dialog er aktiv");
                    }
                });
                dia.add(btn3, BorderLayout.SOUTH);
                dia.setMinimumSize(new Dimension(200, 200));
                dia.setVisible(true);
            }
        });
        getContentPane().add(btn1, BorderLayout.NORTH);
        JButton btn2 = new JButton("Test om applet er aktiv");
        btn2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, "Applet er aktiv");
            }
        });
        getContentPane().add(btn2, BorderLayout.SOUTH);
       
    }
}
Avatar billede thomas_fogh Nybegynder
03. december 2010 - 09:56 #9
Hej Arne.
Tak for forslaget. Det duer ikke rigtig med en dialog-boks. Applet'en bliver godt nok inaktiv, men dialog-boksen "forsvinder", hvis man skifter mellem ens browser og et andet program. Man skal så alt-tab'e sig frem til den, fordi den ikke vises på proces-linien.

Jeg har løst problemerne med den anden løsning... mcb2001 skriv et svar, hvis du vil ha' nogle points.
Avatar billede mcb2001 Nybegynder
03. december 2010 - 10:37 #10
må vi vide hvad du endte med?
Avatar billede thomas_fogh Nybegynder
03. december 2010 - 10:46 #11
Et halvgennemsigtigt panel hen over min applet, disable alle knapper på applet, og så en popup til min progress bar. Sikkert ikke den bedste måde at gøre det på, men det virker og ser pænt ud... :)
Avatar billede mcb2001 Nybegynder
03. december 2010 - 10:51 #12
:-)
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