Avatar billede machholdt Nybegynder
06. december 2010 - 23:08 Der er 6 kommentarer og
2 løsninger

Knapper i ShowOptionPane laves i string format, men kan ikke tilføje en actionlistener

Hej

Jeg har et problem i et projekt.

Jeg skal bruge en dialog box, som skal komme frem ved tryk på en knap. Inde i denne dialog box skal der være nogle forskellige tekstfelter, samt nogle knapper i bunden.
Har 2 del spørgsmål.

1. Hvordan laves tekstfelterne sådan at der står en "vejledende" tekst inden man skriver i dem, men så snart man markerer dem slettes den automatisk og det man skriver kommer frem?

2. Benytter ShowOptionPane og en opskrift fundet på oracles java api, og benytter et array af typen object til at holde de forskellige textfelter osv. Og knapperne nederst er et array af typen strings. Hvordan tilføjer jeg så en actionhandler til denne knap, når den faktisk er en string?

Her er den del af koden problemet omhandler.
Bemærk venligst at jeg har lavet en kommentar i koden hvor problemet opstår.

private class BtnIndtastNyeVrdierActionListener implements ActionListener
    {
        private ButtonGroup buttonGroup;
        public void actionPerformed(ActionEvent arg0)
        {
            Object[] message = new Object[9];
            message[0] = "Indtast de nye målinger:";
            message[1] = new JTextField("Vindhastighed");
            message[2] = new JLabel("Vindretning:");
            message[3] = new JRadioButton("Nord",true);
            message[4] = new JRadioButton("Øst");
            message[5] = new JRadioButton("Syd");
            message[6] = new JRadioButton("Vest");
            message[7] = new JTextField("Regnmængde");
            message[8] = new JTextField("Temperatur");
            buttonGroup = new ButtonGroup();
            buttonGroup.add((AbstractButton) message[3]);
            buttonGroup.add((AbstractButton) message[4]);
            buttonGroup.add((AbstractButton) message[5]);
            buttonGroup.add((AbstractButton) message[6]);
           
            // Knapperne
            String[] options = {"Registrer", "Afbryd", "Hjælp"};
           
            // HER er det. BURDE vel egentlig kunne tilgå en knap og tilføje en actionEventHandler ved
// at skrive options[0].addosv. men det virker bare ikke.

            JOptionPane.showOptionDialog(frmVejrcentral, message, "Indtast værdier manuelt", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[2]);
           
        }
    }
    private class registrerActionListener implements ActionListener
    {
        public void actionPerformed(ActionEvent arg0)
        {
           
        }
    }
Avatar billede arne_v Ekspert
07. december 2010 - 00:14 #1
re 2)

en løkke som itererer over buttonGroup.getElements() og tilføjer ActionListener til hver JButton
Avatar billede arne_v Ekspert
07. december 2010 - 00:15 #2
re 1)

en ide:

setText med teksten
en boolean som markerer om det er initial state
en DocumentListener som sletter alt hvis initial state
Avatar billede machholdt Nybegynder
07. december 2010 - 15:56 #3
Vedr. 2'eren forstår jeg ikke helt hvordan jeg gør med den metode, er med på at lave en for løkke men, da det kun er en knap der skal have den aktuelle funktion er det vist unødvendigt.

Forsøger at add'e en actionlistener til knappen på følgende måde:

options[0].addActionListener(new RegistrerActionListener());

Men får følgende fejl meddelelse i eclipse:

The method addActionListener(VejrCentralFrame.RegistrerActionListener) is undefined for the type String

Hvordan vil du løse det på den måde med getElements() hvis det er muligt?
Avatar billede machholdt Nybegynder
07. december 2010 - 16:59 #4
Jeg har forsøgt at følge noget kode fra: https://swingset3.dev.java.net/
omkring Component dialog box, men synes det er en svær måde at lave en "popup" boks på.
Jeg benytter window builder pro til det grafiske, men er stadig på begynder stadiet. Er der en måde hvorpå man kan lave en form for funktion tilknyttet en knap, som gør at ved tryk på knappen popper en boks op og beder om nogle oplysninger i nogle textfelter, og man kan så vælge OK, cancel i bunden. Informationerne skal så hentes ind i den anden del af programmet og vises i nogle textfelter. Er der en nem måde at lave det på i window builder pro, eller måske uden?
Avatar billede arne_v Ekspert
07. december 2010 - 17:23 #5
Hvis den kun skal saette paa en, saa brug stadig buttonGroup.getElements() men tilføj kun ActionListener til den foerste JButton
Avatar billede machholdt Nybegynder
07. december 2010 - 19:37 #6
Altså JButtons har jeg ikke nogen af..

Der er JRadiobuttons og de er en del af den buttonGroup.

Men dem jeg vil have tilføjet actionhandleren til er dem i koden nedenunder, de erklæres her:

Object[] options = {"Registrer", "Afbryd", "Hjælp"};

JOptionPane.showOptionDialog laver så knapperne ud fra arrayet options.

en jeg ved ikke hvordan jeg kan få sat en specifik actionhandler på en af knapperne?

Er det forståeligt hvor problemet ligger?
Avatar billede machholdt Nybegynder
08. december 2010 - 11:19 #7
Hmm. Har løst problemet ved at lave en ny frame, og så indsætte framen i den oprindelige klasse.

Arne V > Smider du et svar for nummer 1.
Avatar billede arne_v Ekspert
08. december 2010 - 22:36 #8
ok
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