» »

[Java] Ob kliku na gumb naj se prebere stanje stikal

[Java] Ob kliku na gumb naj se prebere stanje stikal

Bela01 ::

Za lažji pregled sem odprla novo temo.
Torej, ker sem še bolj "zelena" v tem, imam tudi bolj začetniška vprašanje.
Okno vsebuje tri radiobuttone in dva "navadna" gumba. En od teh navadnih gumbov je gumb preveri, ki ugotovi, katero stikalo je izbral uporabnik in nato glede na izbrano stikalo izpiše neko besedilo v določeno Panelo.

Problem je v tem, ker se ob kliku na gumb preveri nič ne zgodi. Kot, da sploh ne gre v metodo actionPerformed(). Kaj sem naredila narobe?
Predvidevam, da nekako v metodi actionPerformed ne more ugotovit stanja stikal. Ampak če dam for zanko, ki je v tej metodi v metodo itemStateChanged, tudi nič ne deluje (pač da bi se odgovor, takoj pokazal, ko bi uporabnik kliknil na gumb).

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.*;

public class Naloge implements ItemListener, ActionListener {

    String[] a;
    String pres = "    ";
    String naloga, odgovor;
    String[] gumb = new String[3];
    
    private String Preveri_g = "Preveri_g";
    private String Naprej_g = "Naprej_g";
    
    //pravilni odgovor je prvi gumb - privzeto
    int odg = 0;
    
    //ustvarimo gumbe
    JRadioButton[] rgumb = new JRadioButton[3];;  
    JButton preveri, naprej;
    
    Toolkit tool = Toolkit.getDefaultToolkit();
    Image slika1 = tool.getImage("naloga1.jpg");
    
    //ustvarimo panelo, ki bo nosila ostale v sebi
    JPanel namizje = new JPanel(new BorderLayout());
    JPanel namizje1 = new JPanel(new BorderLayout());
    JPanel namizje2 = new JPanel(new BorderLayout());
    JPanel resitev = new JPanel(new BorderLayout());

    //ostale panele
    JPanel navodilo = new JPanel(new BorderLayout());
    JPanel nosilna = new JPanel(new GridLayout());
    JPanel odgovori = new JPanel(new GridLayout(3, 1));
    JPanel primeri = new JPanel(new GridLayout());
    JPanel gumbi = new JPanel(new GridLayout(1, 2));
    
    
    public JPanel ZgradiOkno() {

        //panela nosilna bo vsebovala paneli odgovori in primeri
        nosilna.add(odgovori);
        nosilna.add(primeri);
        
        //nastavimo lege panel v glavni paneli
        namizje1.add(navodilo, BorderLayout.NORTH);
        namizje1.add(nosilna, BorderLayout.CENTER);
        namizje1.add(resitev, BorderLayout.SOUTH);
        namizje2.add(gumbi, BorderLayout.SOUTH);
        namizje.add(namizje1, BorderLayout.NORTH);
        namizje.add(namizje2, BorderLayout.CENTER);
        
        //določimo dimenzije panel
        navodilo.setPreferredSize(new Dimension(350, 50));
        odgovori.setPreferredSize(new Dimension(200, 250));
        primeri.setPreferredSize(new Dimension(200, 250));
        resitev.setPreferredSize(new Dimension(350, 50));
        gumbi.setPreferredSize(new Dimension(350, 50));

        //obrobimo namizje
        namizje1.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5));
        namizje2.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));

        //panelam nastavimo robove, možna besedila na rob, ...
        navodilo.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 0, 5, 0),
                BorderFactory.createEtchedBorder()));
        nosilna.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 0, 5, 0),
                BorderFactory.createEtchedBorder()));
        odgovori.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createTitledBorder(
                    LineBorder.createGrayLineBorder(),
                    "Možni odgovori")));
        primeri.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(5, 5, 5, 5),
                BorderFactory.createTitledBorder(
                    LineBorder.createGrayLineBorder(),
                    "Slika kot pomoč")));
        resitev.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(1, 0, 1, 0),
                BorderFactory.createEtchedBorder()));
        gumbi.setBorder(
            new CompoundBorder(
                BorderFactory.createEmptyBorder(1, 0, 1, 0),
                BorderFactory.createEtchedBorder()));

        //grupa, ki bo združila radiobutone - rgumbe, da bodo sodelovali med seboj
        ButtonGroup grupa = new ButtonGroup();
        
        //ustvarimo rgumbe z možnimi odgovori
        for (int i = 0; i < 3; i++)
        {
            rgumb[i] = new JRadioButton(gumb[i]);
            if (i != odg)
                rgumb[i].setActionCommand("NE");
            else
                rgumb[i].setActionCommand("DA");
            rgumb[i].addItemListener(this);
            grupa.add(rgumb[i]);
            odgovori.add(rgumb[i]);
        }
                
        //vstavimo slikico, besedilo v labelo
        navodilo.add(new JLabel(pres), BorderLayout.WEST);
        navodilo.add(new JLabel(naloga), BorderLayout.CENTER);
        Icon ikona = new ImageIcon(slika1);
        primeri.add(new JLabel(ikona));
        resitev.add(new JLabel(pres), BorderLayout.WEST);
        
        //ustvarimo in vstavimo v labelo gumba preveri in naprej
        preveri = new JButton("Preveri");
        preveri.setActionCommand(Preveri_g);
        preveri.addActionListener(this);
        gumbi.add(preveri);
        naprej = new JButton("Naprej");
        naprej.setActionCommand(Naprej_g);
        naprej.addActionListener(this);
        gumbi.add(naprej);
        
                      
        return namizje;
    }

    public static void main(String[] args) {

        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("Reševanje nalog");
        Naloge app = new Naloge();
                
        // uporabimo drsno površino v primeru premajhnega okna
        JScrollPane pane = new JScrollPane(app.ZgradiOkno());
        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        
        frame.getContentPane().add(pane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        
    }
    
       
    public void itemStateChanged(ItemEvent event) {

       
    }
    
    public void actionPerformed(ActionEvent event) {
        
         if (event.getActionCommand().equals(Preveri_g)) {
                   
            for (int i = 0; i < 3; i++){       
                if (rgumb[i].isSelected() && i == odg)
                {
                    odgovor = "Odgovor je pravilen!";
                    resitev.add(new JLabel(odgovor), BorderLayout.CENTER);
                }
                else {
                    odgovor = "Odgovor ni pravilen!";
                    resitev.add(new JLabel(odgovor), BorderLayout.CENTER);
                } 
            }
         }      
    }
}

Bela01 ::

V metodo itemStateChanger sem dala tudi naslednji if stavek, pa nekak noče ugotovit oz. izpisat.


public void itemStateChanged(ItemEvent event) {

       if (event.getItemSelectable().equals(&quot;Da&quot;))
            resitev.add(new JLabel(&quot;OK&quot;), BorderLayout.CENTER);
    }


KaRkY ::

Ta JLabel na katerega hočeš da se odgovor izpiše ustvari skupaj z ostalimi potem pa samo v actionPerformed kliči setText od tega JLabela.

PS. Sicer mam jaz rešitev ampak bolje je da sama napišeš boš se več naučila

Bela01 ::

Pa saj to ne moreš verjet!! Ratalo mi je :D. Pa še kodo sem zaj malo uredila in naredila za vsak Panel svoj razred, ker se več nisem znašla v tisti dolgi klobasi.

Thx KarkY.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[java]problem z Throws

Oddelek: Programiranje
221607 (1136) killa bee
»

[Java] Ne zažene appleta

Oddelek: Programiranje
51213 (1146) iggy
»

[Java] Zagon appleta v HTML

Oddelek: Programiranje
161545 (1367) Bela01
»

[JAVA] branje iz datoteke

Oddelek: Programiranje
242412 (2047) Bela01
»

[Java]Vprašanja

Oddelek: Programiranje
242112 (1580) Bela01

Več podobnih tem