Avatar
ced
Člen
Avatar
ced:

Zdravím :) chtěl bych využít objektu, který je ale vytvořen v jiné třídě. Když se pokusim na něj udělat referenci, tak mi to samozřejmě napíše, "cannot find symbol "

 
Odpovědět 22.2.2014 13:01
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na ced
Zdeněk Pavlátka:

Bez kódu nebo křišťálové koule ti těžko poradíme.

Nahoru Odpovědět  +2 22.2.2014 13:03
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
ced
Člen
Avatar
ced:
public static void main(String[] args) {
       Gui okno = new Gui();
       okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       okno.setVisible(true);
       okno.setSize(300,300);
       okno.setLocationRelativeTo(null);

       Kostka k1 = new Kostka(new char[]{'K','U','N','D','T','O'});

Tady si vytvořím kostku

public class Gui extends JFrame {

    private JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11,
                    b12, b13, b14, b15, b16;


    public Gui()
    {
        super("MixIt");

        GridBagLayout layout = new GridBagLayout();
        GridBagConstraints gbc = new GridBagConstraints();



        gbc.insets = new Insets (10,10,10,10);
        Container con = getContentPane();
        con.setLayout(layout);
        con.setBackground(new Color(210,244,255));
    b1 = new JButton(k1.pismeno);

a chtěl bych do tlacitka b1 vložit popis, který padnul na kostce, která je ale v jiné třídě...

 
Nahoru Odpovědět 22.2.2014 13:23
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na ced
Jan Vargovský:

Přidáš si konstruktor k tomu Gui, aby ti bral jako parametr i kostku.

public class Gui extends JFrame {

     private JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11,
                     b12, b13, b14, b15, b16;
     private Kostka kostka;

     public Gui(Kostka kostka)
     {
         super("MixIt");

         GridBagLayout layout = new GridBagLayout();
         GridBagConstraints gbc = new GridBagConstraints();

         this.kostka = kostka;

         gbc.insets = new Insets (10,10,10,10);
         Container con = getContentPane();
         con.setLayout(layout);
         con.setBackground(new Color(210,244,255));
     b1 = new JButton(kostka.pismeno);

Pak jí jen předáš:

public static void main(String[] args) {
        Kostka k1 = new Kostka(new char[]{'K','U','N','D','T','O'});
        Gui okno = new Gui(k1);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        okno.setVisible(true);
        okno.setSize(300,300);
        okno.setLocationRelativeTo(null);

Btw, tohle je totální prasokód:

private JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11,
                     b12, b13, b14, b15, b16;

Uprav si to na pole. Jestli neumíš pole + cykly, tak radši na práci s objekty na pár dní zapomeň a douč se základy

Editováno 22.2.2014 13:30
 
Nahoru Odpovědět  +2 22.2.2014 13:29
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

1-Deklarovat metodu, která vrací aktuálně hozenou hodnotu
2-Deklarovat hodnotu veřejnou
3-Využití přátelských tříd či deklarovat celou třídu jako přátelskou. (nevím jestli Java podporuje)

Jinak ještě bys měl ukázat kód třídy Kostka

Nahoru Odpovědět  +1 22.2.2014 13:31
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
ced
Člen
Avatar
ced:

1 jsem zkoušel udělal jsem si metodu getLetter() která vrací aktuální písmenko hozené na kostce, ale stejně jí nemůžu použít v jiné třídě...

package mixit;

import java.util.Random;


public class Kostka {

    public char pismeno;
    char[] poleznaku;

    public Kostka (char[] poleznaku)
    {

     this.poleznaku = poleznaku;
     pismeno = (poleznaku[new Random().nextInt(poleznaku.length)]);


    }
   public char getLetter()
    {
    return pismeno;
    }

jinak dík za všechny rady :)

 
Nahoru Odpovědět 22.2.2014 14:07
Avatar
xxxvodnikxxx
Člen
Avatar
xxxvodnikxxx:

hm, né že bych se v tom kódu nějak zorientoval, ale co jsem pochopil, tak by na to měly stačit (samozřejmě public jak jinak) gettery..

A jinak možností je víc..

kostku můžeš teoreticky udělat jako vnitřní třídu, private , pokud ji budeš používat jen tam,

případně nějakej kontejner, ovladač, kterej uděláš jako singleton (jedináčka, viz návrhový vzory) - ten zajistí že vždycky když ho zavoláš, tak dostaneš jednu a tu samou instanci (instaceof)..

Ale jak bylo řečeno výše, p4koo - pokud neumíš základy, je blbost chtít umět něco víc ..

EDIT : jó, už to trochu pobírám :D
No, tak přetíženej konstruktor na okno, a dej mu kostku parametrem, kterou si ulož do pomocný proměnný v okně ..

Editováno 22.2.2014 14:57
Nahoru Odpovědět 22.2.2014 14:55
Unix- svět, kde chcete být nulou :) (UID)
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na ced
Jan Vargovský:

Btw, tvoji třídu bych si představoval spíše jako něco takového :)

public class Kostka {
     private char[] poleZnaku;

     public Kostka (char[] poleznaku)
     {
      this.poleZnaku = poleznaku;
     }
    public char getLetter()
     {
     return poleZnaku[new Random().nextInt(poleznaku.length)];
     }

Netvoř na něco getter, když už je to public. Navíc by jsi pokaždé vracel to samé písmeno, takže takhle bych si to spíše představoval, když už by to měla být kostka :)

 
Nahoru Odpovědět 22.2.2014 15:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.