Anonymní profil Tomáš – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Tomáš – Programujte.comAnonymní profil Tomáš – Programujte.com

 

Příspěvky odeslané z IP adresy 213.226.245.–

Tomáš
Java › Neobnovení GridBagLayoutu
4. 8. 2016   #212230

Tak jsem to tedy vyřešil přes znovu vytvoření panelu, stačilo jen přepsat 2 řádky, děkuji moc :) 


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

public class Okno extends Frame {

    VypisCtvercu panel;
    Button tlacitko;

    static final int MAX = 6;

    Okno() {
        super("Okno");
        panel = new VypisCtvercu(MAX);
        tlacitko = new Button("Prepni pocet ctvercu");

        this.setLayout(new BorderLayout());

        this.add(panel, BorderLayout.CENTER);
       
        this.add(tlacitko, BorderLayout.SOUTH);
        tlacitko.addActionListener(new tlacitkoAL());

        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        this.pack();
    }

    class tlacitkoAL implements ActionListener {

        int pocet = MAX;

        public void actionPerformed(ActionEvent e) {
            pocet++;
            if (pocet > 6) {
                pocet = pocet - 6;
            }
            Okno.this.remove(panel);
            panel = new VypisCtvercu(pocet);
            Okno.this.add(panel);
            Okno.this.pack();
        }
    }

    public static void main(String[] args) {
        new Okno().setVisible(true);
    }
}
 class VypisCtvercu extends Panel {

    GridBagLayout layout;
    GridBagConstraints constraints;

    Platno[] platno;
    Label[] label;

    int pocetVypsanychCtvercu;

    public VypisCtvercu(int pocet) {
        layout = new GridBagLayout();
        constraints = new GridBagConstraints();
        this.setLayout(layout);

        platno = new Platno[pocet];
        label = new Label[pocet];

        for (int i = 0; i < pocet; i++) {
            platno[i] = new Platno();
            platno[i].setSize(150, 150);
            vlozKomponentu(platno[i], i, 0, 1, 1, 0, 0);
            label[i] = new Label((i + 1) + ")");
            vlozKomponentu(label[i], i, 1, 1, 1, 0, 0);
        }
        pocetVypsanychCtvercu = pocet;        
    }

    public void vlozKomponentu(Component co, int gridx, int gridy, int gridwidth, int gridheight, int weightx, int weighty) {
        constraints.gridx = gridx;
        constraints.gridy = gridy;
        constraints.gridwidth = gridwidth;
        constraints.gridheight = gridheight;
        constraints.weightx = 1;
        constraints.weighty = 1;
        constraints.insets = new Insets(0, 0, 0, 10);
        layout.removeLayoutComponent(co);
        layout.setConstraints(co, constraints);
        this.add(co);
    }

    public Dimension getMinimumSize() {
        return new Dimension(900, 173);
    }

    public Dimension getPreferredSize() {
        return getMinimumSize();
    }    
}
class Platno extends Canvas {

    public void paint(Graphics g) {
        Dimension d = getSize();
        int sirka = (d.width > d.height) ? d.width : d.height;
        g.setColor(Color.black);
        g.fillRect(0, 0, sirka, sirka);
    }
}
Tomáš
Java › Neobnovení GridBagLayoutu
4. 8. 2016   #212229

Založit nový panel mě nenapadlo, to zní dobře a mělo by to fungovat.

Díky moc za rady :)

Tomáš
Java › Neobnovení GridBagLayoutu
3. 8. 2016   #212198

Dobrý den,
   před pár hodinami jsem sem vkládal dotaz ohledně programu s kostkami, bylo to nepřehledné. Proto jsem přišel s triviálním programem na lepší pochopení mého dotazu.

Když spustím tento program vidím 6 vykreslených čtverců v panelu pomocí GridBagLayoutu. Když kliknu na tlačítko, tak se počet vykreslených čtverců postupně mění. Např. vykreslím pomocí tlačítka 2 čtverce. Problém je, že Layout manager si pořád pamatuje souřadnice minulých 6 čtverců (nevím jak) a tyto 2 čtverce vypisuje do 2 sloupců (ze 6) zleva, místo toho aby byli dva čtverce souměrně zarovnané na střed. Když změníte hodnotu "MAX = 2" a znovu zapnete, tak podle mého, by to mělo vypadat takto.
Jak to že nevypadá? Vždyť v metodě vlozitCtverce() znovu postupně vkládám (do 2 sloupců) zmíněné 2 čtverce. Poraďte prosím.  
 


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

public class Okno extends Frame {

    VypisCtvercu panel;
    Button tlacitko;

    static final int MAX = 6;

    Okno() {
        super("Okno");
        panel = new VypisCtvercu(MAX);
        tlacitko = new Button("Prepni pocet ctvercu");

        this.setLayout(new BorderLayout());

        this.add(panel, BorderLayout.CENTER);
        this.add(tlacitko, BorderLayout.SOUTH);
        tlacitko.addActionListener(new tlacitkoAL());

        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        this.pack();
    }

    class tlacitkoAL implements ActionListener {

        int pocet = MAX;

        public void actionPerformed(ActionEvent e) {
            pocet++;
            if (pocet > 6) {
                pocet = pocet - 6;
            }
            Okno.this.panel.vlozitCtverce(pocet);
        }
    }

    public static void main(String[] args) {
        new Okno().setVisible(true);
    }
}
 class VypisCtvercu extends Panel {

    GridBagLayout layout;
    GridBagConstraints constraints;

    Platno[] platno;
    Label[] label;

    int pocetVypsanychCtvercu;

    public VypisCtvercu(int pocet) {
        layout = new GridBagLayout();
        constraints = new GridBagConstraints();
        this.setLayout(layout);

        platno = new Platno[pocet];
        label = new Label[pocet];

        for (int i = 0; i < pocet; i++) {
            platno[i] = new Platno();
            platno[i].setSize(150, 150);
            vlozKomponentu(platno[i], i, 0, 1, 1, 0, 0);
            label[i] = new Label((i + 1) + ")");
            vlozKomponentu(label[i], i, 1, 1, 1, 0, 0);
        }
        pocetVypsanychCtvercu = pocet;
    }

    public void vlozKomponentu(Component co, int gridx, int gridy, int gridwidth, int gridheight, int weightx, int weighty) {
        constraints.gridx = gridx;
        constraints.gridy = gridy;
        constraints.gridwidth = gridwidth;
        constraints.gridheight = gridheight;
        constraints.weightx = 1;
        constraints.weighty = 1;
        constraints.insets = new Insets(0, 0, 0, 10);
        layout.setConstraints(co, constraints);
        this.add(co);
    }

    public Dimension getMinimumSize() {
        return new Dimension(900, 173);
    }

    public Dimension getPreferredSize() {
        return getMinimumSize();
    }

    public void vlozitCtverce(int pocetCtvercu) {
        odstranitVse();
        layout = new GridBagLayout();
        constraints = new GridBagConstraints();
        for (int i = 0; i < pocetCtvercu; i++) {
            vlozKomponentu(platno[i], i, 0, 1, 1, 0, 0);
            vlozKomponentu(label[i], i, 0, 1, 1, 0, 0);
        }
        pocetVypsanychCtvercu = pocetCtvercu;
    }

    public void odstranitVse() {
        for (int i = 0; i < pocetVypsanychCtvercu; i++) {
            this.remove(platno[i]);
            this.remove(label[i]);
        }
    }
}
class Platno extends Canvas {

    public void paint(Graphics g) {
        Dimension d = getSize();
        int sirka = (d.width > d.height) ? d.width : d.height;
        g.setColor(Color.black);
        g.fillRect(0, 0, sirka, sirka);
    }
}
Tomáš
Java › Znovuvytvoření panelu
3. 8. 2016   #212197

#3 Kit
Jde teda o to, že když v programu kliknete na tlačítko, tak se vypíše nových 5 kostek.
A problém je, že při těchto 5 kostek by vpravo nemělo být volné místo pro další kostku, mělo by to vypadat tak, jako když ve třídě okno místo řádku "kostky = new VypisKostek(5);" napíšete "kostky = new VypisKostek(5);" -- řádek č.37, nevím, jestli chápete, co myslím :/

Tomáš
Java › Znovuvytvoření panelu
3. 8. 2016   #212196

#3 Kit
Tohle by měl být kompletní zdroják i s obrázky.
Díky moc za trpělivost, nejsem ve těchto ohledech moc zkušený.

package cizek.kostky;


import java.util.*;
import cizek.random.Random;
import cizek.vyjimky.ChybnyVyber;

public class Hrac {
    String jmenoHrace;
    int pocetKostek;
    Okno owner;

    int[] hozeneKostky;
    int[] skoreJednotlivychKol;
    int skoreCelkove;
    int kolo;

    static int[] vybraneKostky;

    Hrac(String jmeno, Okno ok, int pocetKol) {
        jmenoHrace = jmeno;
        pocetKostek = 6;
        owner = ok;
        skoreCelkove = 0;
        skoreJednotlivychKol = new int[pocetKol];
        kolo = 1;
    }

    public void hodKostek() {
        hozeneKostky = null;
        hozeneKostky = new int[pocetKostek];
        for (int i = 0; i < pocetKostek; i++) {
            hozeneKostky[i] = Random.nahodneCislo(1, 6);
        }
        owner.kostky.vlozitKostky(hozeneKostky, pocetKostek);
    }

    public void vybratKostky(int[] indexyVybranych, int pocetVybranych) {
        vybraneKostky = null;
        vybraneKostky = new int[pocetVybranych];
        for (int i = 0; i < pocetVybranych; i++) {
            vybraneKostky[i] = hozeneKostky[indexyVybranych[i]];
        }
    }

    public int vypocetSkore(int[] indexyVybranych, int pocetVybranych, boolean zapsatDoSkoreKola) throws ChybnyVyber {

        int skore = 0;
        int pocetStejnych;
        int cislo;
        boolean rada;
        int zacatek;
        
        vybratKostky(indexyVybranych, pocetVybranych);
        Arrays.sort(vybraneKostky);

        for(int u = 0; (u<2)&&(vybraneKostky.length>2); u++) {
            zacatek = 0;
            cislo = 0;
            pocetStejnych = 1;
            rada = false;
            for (int i = 0; i < vybraneKostky.length; i++) {
                if (i != 0) {
                    if (vybraneKostky[i] == vybraneKostky[i - 1]) {
                        cislo = vybraneKostky[i];
                        pocetStejnych++;
                        rada = true;
                        zacatek = i-1;
                    } else {
                        if (rada && pocetStejnych > 2) {
                            if (cislo != 1) {
                                skore = skore + cislo * 100 * (pocetStejnych - 2);
                            } else {
                                skore = skore + 1000 * (pocetStejnych - 2);
                            }
                            odendaniKostek(zacatek, pocetStejnych);
                        }
                        zacatek = 0;
                        cislo = 0;
                        pocetStejnych = 1;
                        rada = false;
                    }
                }
            }          
        }
        if(vybraneKostky.length != 0){
                for(int i = 0; i < vybraneKostky.length;i++){
                    if(vybraneKostky[i] == 1 | vybraneKostky[i] == 1 ){
                        skore = skore+((vybraneKostky[i]==1)?100:50);
                    }else{
                        if(zapsatDoSkoreKola){
                            throw new ChybnyVyber(vybraneKostky[i]);
                        }
                    }
                }      
        }
        if(zapsatDoSkoreKola){
            skoreJednotlivychKol[kolo-1] = skore;
            kolo++;
        }
        return skore;
    }
    
    public static void odendaniKostek(int zacatek, int pocetKostek){
        int[] pomocna = new int[vybraneKostky.length-pocetKostek];
        int index = 0;
        for(int i = 0; i<vybraneKostky.length;i++){
            if(i == zacatek){
                i = i+pocetKostek-1; 
            }else{
                pomocna[index]=vybraneKostky[i];
                index++;
            }
        }
        vybraneKostky = pomocna;        
    } 
}

package cizek.kostky;

import java.awt.*;
import java.awt.event.*;
import cizek.obrazky.*;


public class Okno extends Frame {
    
    Obrazky obr;
    //Hrac[] seznamHracu;  
    Hrac zkusebniHrac;
    
    Label nadpis1, popHrace, aktHrac, nadpis2;
    Button butt1, butt2;    
    Label vyberLB, skoreCelkoveLB, skoreKolaLB;
    TextField vyberTF, skoreCelkoveTF, skoreKolaTF;    
    
    Label[] kostkyLB;
    Platno[] kostkzPL;
    Checkbox[] kostkyCHB;    
    VypisKostek kostky; 
    
    GridBagLayout gbl;
    GridBagConstraints gbc;
    
    int aktualniHrac;
    static Toolkit t;
            
    Okno(){
        super("Kostky");
        gbl = new GridBagLayout();
        gbc = new GridBagConstraints();        
        this.setLayout(gbl);
        
        kostky = new VypisKostek(6);
        obr = new Obrazky();
        zkusebniHrac = new Hrac("Tomáš", this,1000);
        sestaveniOkna();          
        Toolkit t = Toolkit.getDefaultToolkit();
        
        
        butt1.addActionListener(new Butt1AL());
        
        
        
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
        });
        this.addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent e){
                System.out.println("Cele okno: "+Okno.this.getWidth()+"x"+Okno.this.getHeight());
                System.out.println("Panel: " + kostky.getWidth()+"x"+kostky.getHeight());
            }
        });
        this.pack();
        this.setIconImage(obr.getIkonka());
        this.setLocation(((t.getScreenSize().width-this.getWidth())/2),(t.getScreenSize().height-this.getHeight())/4);
        this.setResizable(false);         
    }
    
    private void sestaveniOkna(){     
            //kostky.setBackground(Color.MAGENTA);
            nadpis1 = new Label("KOSTKY",Label.CENTER);
            nadpis1.setFont(new Font("SansSerif",Font.BOLD, 100));
            //nadpis1.setBackground(Color.yellow);
            nadpis2 = new Label("HOZENÉ KOSTKY",Label.CENTER);
            nadpis2.setFont(new Font("SansSerif",Font.PLAIN,25));
            //nadpis2.setBackground(Color.orange);
            popHrace = new Label("Hráč na řadě:",Label.LEFT);
            popHrace.setFont(new Font("SansSerif",Font.PLAIN,35));
            //popHrace.setBackground(Color.blue);
            aktHrac = new Label(zkusebniHrac.jmenoHrace,Label.CENTER); //////upravit!!!!! 
            aktHrac.setFont(new Font("SansSerif",Font.PLAIN,35));
            //aktHrac.setBackground(Color.pink);
            vyberLB = new Label("Výběr:",Label.RIGHT);
            vyberLB.setFont(new Font("SansSerif",Font.PLAIN,20));
            //vyberLB.setBackground(Color.cyan);
            vyberTF = new TextField("0", 4);
            vyberTF.setFont(new Font("SansSerif",Font.PLAIN,20));//////////////////////////////////////////
            vyberTF.setEditable(false);     
            //vyberTF.setBackground(Color.green);
            skoreCelkoveLB = new Label("Celkové skóre:",Label.RIGHT);
            skoreCelkoveLB.setFont(new Font("SansSerif",Font.PLAIN,20));
            //skoreCelkoveLB.setBackground(Color.blue);
            skoreCelkoveTF = new TextField("0",6);
            skoreCelkoveTF.setFont(new Font("SansSerif",Font.PLAIN,20));///////////////////////////
            skoreCelkoveTF.setEditable(false);
            //skoreCelkoveTF.setBackground(Color.yellow);
            skoreKolaLB = new Label("Skóre kola:",Label.RIGHT);
            skoreKolaLB.setFont(new Font("SansSerif",Font.PLAIN,20));
            //skoreKolaLB.setBackground(Color.orange);
            skoreKolaTF = new TextField("0",5);
            skoreKolaTF.setFont(new Font("SansSerif",Font.PLAIN,20));///////////////////
            skoreKolaTF.setEditable(false);
            //skoreKolaTF.setBackground(Color.pink);
            butt1 = new Button("Hodit");
            butt1.setFont(new Font("SansSerif",Font.PLAIN,20));
            //butt1.setBackground(Color.yellow);
            butt2 = new Button("Konec tahu");
            butt2.setFont(new Font("SansSerif",Font.PLAIN,20));
            //butt2.setBackground(Color.gray);
            
            Panel pan1 = new Panel();
            pan1.setLayout(new GridLayout(1,2));
            Panel pan2 = new Panel();
            pan2.setLayout(new GridLayout(1,2));
            Panel pan3 = new Panel();
            pan3.setLayout(new GridLayout(1,2));
            
            pan1.add(skoreCelkoveLB);
            pan1.add(skoreCelkoveTF);
            pan2.add(skoreKolaLB);
            pan2.add(skoreKolaTF);
            pan3.add(vyberLB);
            pan3.add(vyberTF);
            
            gbc.fill = GridBagConstraints.HORIZONTAL;
            vlozKomponentu(new VodorovnaCara(),0,0,GridBagConstraints.REMAINDER,1,0,0,0,1,new Insets(0,0,0,0));         
            vlozKomponentu(nadpis1,0,1,GridBagConstraints.REMAINDER,1,0,0,0,0,new Insets(10,0,0,0));           
            
            vlozKomponentu(new VodorovnaCara(),0,2,GridBagConstraints.REMAINDER,1,0,0,0,1,new Insets(0,0,20,0));            
            
            vlozKomponentu(popHrace,0,3,2,1,0,0,0,0,new Insets(0,0,20,50));            
            vlozKomponentu(aktHrac,2,3,GridBagConstraints.REMAINDER,1,0,0,0,0,new Insets(0,0,20,0));
            
            gbc.fill = GridBagConstraints.NONE;
            vlozKomponentu(nadpis2,0,4,GridBagConstraints.REMAINDER,1,0,0,0,0,new Insets(0,0,10,0));
            
            vlozKomponentu(kostky,0,5,GridBagConstraints.REMAINDER,1,0,0,0,0,new Insets(0,0,0,0));
            
            vlozKomponentu(pan1,0,6,1,1,0,0,0,0,new Insets(25,0,0,10));
            vlozKomponentu(pan2,1,6,1,1,0,0,0,0,new Insets(25,0,0,10));
            vlozKomponentu(pan3,2,6,1,1,0,0,0,0,new Insets(25,0,0,0));            
            gbc.fill = GridBagConstraints.BOTH;
            vlozKomponentu(butt1,3,6,1,1,0,0,20,10,new Insets(25,50,0,0));
            vlozKomponentu(butt2,4,6,GridBagConstraints.REMAINDER,1,0,0,20,0,new Insets(25,10,0,0));            
            
            butt2.setEnabled(false);            
    }
    
    public void vlozKomponentu(Component co, int gridx, int gridy, int gridwidth, int gridheight, int weightx, int weighty, int ipadx, int ipady, Insets ins){
        gbc.gridx = gridx;
        gbc.gridy = gridy;
        gbc.gridwidth = gridwidth;
        gbc.gridheight = gridheight;
        gbc.weightx = 1;
        gbc.weighty = 1;
        gbc.ipadx = ipadx;
        gbc.ipady = ipady;
        gbc.insets = ins;
        gbl.setConstraints(co, gbc);
        this.add(co);        
    }
    
    public Insets getInsets(){
        return new Insets(48,25,25,25);
    }
    
    class Butt1AL implements ActionListener {
        public void actionPerformed(ActionEvent e){
                int[] pomocna = {1,2,3,4,5};
                
               kostky.vlozitKostky(pomocna, pomocna.length);
            }
        }
    
    
    public static void main(String[] args){
        Okno ok = new Okno();
        ok.setVisible(true);
    }     
}

package cizek.kostky;

import java.awt.*;

public class Platno extends Canvas {
    
    Image img;   
    boolean vykreslit;
    
    public Platno(Image img) {
        this.img = img;
        this.vykreslit = vykreslit;        
    }
    public void paint(Graphics g){        
        Dimension d = getSize();
        int sirka = (d.width>d.height)?d.width:d.height;
        g.drawImage(img,0,0,sirka,sirka,this);               
    }
    public void nastavitObrazek(Image img){
        this.img = img;
        repaint();
    }
}
package cizek.kostky;

import java.awt.*;
import cizek.obrazky.Obrazky;

public class VypisKostek extends Panel {

    Platno[] kostkyPL;
    Checkbox[] kostkyCH;
    int pocetVypsanychKostek;

    GridBagConstraints gbc;
    GridBagLayout gbl;

    Obrazky obr;
    Image[] obrKostek;

    VypisKostek(int pocetKostek) {
        obr = new Obrazky();
        obrKostek = obr.getAll();

        gbc = new GridBagConstraints();
        gbl = new GridBagLayout();
        this.setLayout(gbl);

        kostkyPL = new Platno[pocetKostek];
        kostkyCH = new Checkbox[pocetKostek];

        for (int i = 0; i < pocetKostek; i++) {
            kostkyPL[i] = new Platno(obrKostek[0]);
            kostkyPL[i].setSize(150, 150);
            vlozKomponentu(kostkyPL[i], i, 0, 1, 1, 0, 0);
        }
        for (int i = 0; i < pocetKostek; i++) {
            kostkyCH[i] = new Checkbox((i + 1) + ". kostka");
            kostkyCH[i].setFont(new Font("SansSerif", Font.PLAIN, 14));
            vlozKomponentu(kostkyCH[i], i, 1, 1, 1, 0, 0);
        }
        pocetVypsanychKostek = 6;
    }

    public void vlozKomponentu(Component co, int gridx, int gridy, int gridwidth, int gridheight, int weightx, int weighty) {
        gbc.gridx = gridx;
        gbc.gridy = gridy;
        gbc.gridwidth = gridwidth;
        gbc.gridheight = gridheight;
        gbc.weightx = 1;
        gbc.weighty = 1;
        gbl.setConstraints(co, gbc);
        this.add(co);
    }

    public Dimension getMinimumSize() {
        return new Dimension(900, 173);
    }

    public Dimension getPreferredSize() {
        return getMinimumSize();
    }

    public void vlozitKostky(int[] kostky, int pocetKostek) {
        odstranitVse();
        gbl = new GridBagLayout();
        gbc = new GridBagConstraints();
        this.setLayout(null);
        this.setLayout(gbl);
        for (int i = 0; i < pocetKostek; i++) {
            vlozKomponentu(kostkyPL[i], i, 0, 1, 1, 0, 0);

            kostkyPL[i].nastavitObrazek(obrKostek[kostky[i] - 1]);
        }
        for (int i = 0; i < pocetKostek; i++) {
            vlozKomponentu(kostkyCH[i], i, 0, 1, 1, 0, 0);            
        }
        pocetVypsanychKostek = pocetKostek;
    }

    public void odstranitVse() {
        for (int i = 0; i < pocetVypsanychKostek; i++) {
            this.remove(kostkyPL[i]);
        }
        for (int i = 0; i < pocetVypsanychKostek; i++) {
            kostkyCH[i].setState(false);
            this.remove(kostkyCH[i]);
        }
    }
}

package cizek.obrazky;

    import java.awt.*;
    import java.net.URL;
    
    public class Obrazky { 
        
        private Image[] img;
        private Image ikonka;      
        
    public Obrazky() {
        Toolkit t = Toolkit.getDefaultToolkit();
        img = new Image[6];
        
        URL url1 = getClass().getResource("jedna.png");
        img[0] = t.getImage(url1);
        URL url2 = getClass().getResource("dva.png");
        img[1] = t.getImage(url2); 
        URL url3 = getClass().getResource("tri.png");
        img[2] = t.getImage(url3); 
        URL url4 = getClass().getResource("ctyri.png");
        img[3] = t.getImage(url4); 
        URL url5 = getClass().getResource("pet.png");
        img[4] = t.getImage(url5); 
        URL url6 = getClass().getResource("sest.png");
        img[5] = t.getImage(url6);
        URL url7 = getClass().getResource("kostka.png");
        ikonka = t.getImage(url7); 
    }
    
    public Image getImage1(){
        return img[0];
    }
    public Image getImage2(){
        return img[1];
    }
    public Image getImage3(){
        return img[2];
    }
    public Image getImage4(){
        return img[3];
    }
    public Image getImage5(){
        return img[4];
    }
    public Image getImage6(){
        return img[5];
    }
    public Image[] getAll(){
        return img;
    }
    public Image getIkonka(){
        return ikonka;
    }        
}

package cizek.obrazky;

    import java.awt.*;

    public class VodorovnaCara extends Canvas {
    
        public void paint(Graphics g){
            Dimension d = getSize();
            g.fillRect(0,0,d.width,d.height);
        }        
}
package cizek.random;
public class Random {    
    public static int nahodneCislo(int min, int max) {
        max++;
        double nahoda = Math.random();        
        nahoda = (nahoda * (max - min)) + min;
        int cele = (int) Math.floor(nahoda);
        return (cele);
    }    
}

package cizek.vyjimky;

public class ChybnyVyber extends Exception {

    public ChybnyVyber(int cislo) {
        super("Nelze vybrat kostku č. " + cislo);
    }   
}

Připojen obrázek.

Připojen obrázek.

Připojen obrázek.

Připojen obrázek.

Připojen obrázek.

Připojen obrázek.

Připojen obrázek.

Tomáš
Java › Znovuvytvoření panelu
2. 8. 2016   #212194

 Koukám, že mnoho rad se mi nedostavilo. Tak aspoň takhle... 
Metoda vlozitKostky() zavolá metodu odstranitVse(), která tedy z panelu odstraní všechny komponenty, a poté se v metodě vlozitKostky() postupně vloží libovolný počet kostek + příslušné Checkboxy.
Toto vše funguje, avšak má to jednu vadu. Poprvé je vloženo 6 kostek, tedy v GridBagLayoutu je 6 sloupců, a když poté pomocí metody vlozitKostky() vložím např. 5 jiných kostek, tak se v Layoutu stále nachází 6 sloupců. Prvních 5 je zaplněno a poslední sloupec je prázdný.
Je to estetická chyba, ale opravdu by mě zajímalo, jak to vyřešit. Nikde na internetu jsem nenašel, jak se správně mají komponenty z GridBagLayoutu odstraňovat, aby tam nevznikaly tyto zmíněné volné plochy.
Prosim o radu, děkuji :)

public class VypisKostek extends Panel {

    Platno[] kostkyPL;
    Checkbox[] kostkyCH;
    int pocetVypsanychKostek;
    
    
    GridBagConstraints gbc;
    GridBagLayout gbl;    
    
    Obrazky obr;
    Image[] obrKostek;  
    
    VypisKostek(int pocetKostek) {       
        obr = new Obrazky();
        obrKostek = obr.getAll();  
        
        gbc = new GridBagConstraints();
        gbl = new GridBagLayout();
        this.setLayout(gbl);
        
        kostkyPL = new Platno[pocetKostek];
        kostkyCH = new Checkbox[pocetKostek];
        
        for(int i = 0; i < pocetKostek;i++){            
            kostkyPL[i] = new Platno(obrKostek[0]);
            kostkyPL[i].setSize(150,150);            
            vlozKomponentu(kostkyPL[i],i,0,1,1,0,0);            
        }
        for(int i = 0; i < pocetKostek;i++){
            kostkyCH[i] = new Checkbox((i+1)+". kostka");
            kostkyCH[i].setFont(new Font("SansSerif",Font.PLAIN,14));            
            vlozKomponentu(kostkyCH[i],i,1,1,1,0,0);            
        }
        pocetVypsanychKostek = 6;
    }
    public void vlozKomponentu(Component co, int gridx, int gridy, int gridwidth, int gridheight, int weightx, int weighty){
        gbc.gridx = gridx;
        gbc.gridy = gridy;
        gbc.gridwidth = gridwidth;
        gbc.gridheight = gridheight;
        gbc.weightx = 1;
        gbc.weighty = 1;
        gbl.setConstraints(co, gbc);
        this.add(co);
    }
    
    public Dimension getMinimumSize(){        
              return new Dimension(900,173);
    }  
    public Dimension getPreferredSize(){        
              return getMinimumSize();
    }   
    public void vlozitKostky(int[] kostky, int pocetKostek){
        odstranitVse();
        for(int i = 0; i < pocetKostek;i++){            
            vlozKomponentu(kostkyPL[i],i,0,1,1,0,0);
            
            kostkyPL[i].nastavitObrazek(obrKostek[kostky[i]-1]);            
        }
        for(int i = 0; i < pocetKostek;i++){
            vlozKomponentu(kostkyCH[i],i,0,1,1,0,0);
                      }
        pocetVypsanychKostek = pocetKostek;
    }
    public void odstranitVse(){
        for(int i = 0; i < pocetVypsanychKostek;i++){            
            this.remove(kostkyPL[i]);            
        }
        for(int i = 0; i < pocetVypsanychKostek;i++){
            kostkyCH[i].setState(false);
            this.remove(kostkyCH[i]);            
        }        
    }
}
Tomáš
Java › Znovuvytvoření panelu
2. 8. 2016   #212191

  Dobrý den,

potřebuji pomoct s tímto kódem. Ve svém programu používám tuto třídu (VypisKostek - Panel), do které po každém hodu kostek vykresluji hozené kostky + ke každé kostce Checkbox na vybrání kostky. Protože počet kostek se každým hodem mění, tak jsem se pokusil o vytvoření metody(nakresliKostky), která celý panel přemaže a znovu s LayOutMangerem vykreslí celý panel. Ale metoda nefunguje, jsou stále vidět předchozí kostky. 
Nejde mi do hlavy, proč to nejde. Pomozte prosím. Předem děkuji :)

public class VypisKostek extends Panel {

    Platno[] kostkyPL;
    Checkbox[] kostkyCH;
    int pocetVypsanychKostek;
    boolean poprve = true;
    
    GridBagConstraints gbc;
    GridBagLayout gbl;    
    
    Obrazky obr;
    Image[] obrKostek;  
    
    VypisKostek(int kostky[], int pocetKostek, boolean vykreslit) {       
        obr = new Obrazky();
        obrKostek = obr.getAll();  
        nakresliKostky(kostky,pocetKostek, true);
    }
    public void vlozKomponentu(Component co, int gridx, int gridy, int gridwidth, int gridheight, int weightx, int weighty){
        gbc.gridx = gridx;
        gbc.gridy = gridy;
        gbc.gridwidth = gridwidth;
        gbc.gridheight = gridheight;
        gbc.weightx = 1;
        gbc.weighty = 1;
        gbl.setConstraints(co, gbc);
        this.add(co);        
    }
    
    public void nakresliKostky(int[] kostky, int pocetKostek,boolean vykreslit){        
        gbc = new GridBagConstraints();
        gbl = new GridBagLayout();
        this.setLayout(gbl);        
        kostkyPL = new Platno[pocetKostek];
        kostkyCH = new Checkbox[pocetKostek];      
        
        for(int i = 0; i < pocetKostek;i++){            
            kostkyPL[i] = new Platno(obrKostek[kostky[i]-1],vykreslit);
            kostkyPL[i].setSize(150,150);            
            vlozKomponentu(kostkyPL[i],i,0,1,1,0,0);            
        }
        for(int i = 0; i < pocetKostek;i++){
            kostkyCH[i] = new Checkbox((i+1)+". kostka");
            kostkyCH[i].setFont(new Font("SansSerif",Font.PLAIN,14));            
            vlozKomponentu(kostkyCH[i],i,1,1,1,0,0);            
        }       
    } 
}

import java.awt.*;

public class Platno extends Canvas {
    
    Image img;   
    boolean vykreslit;
    
    public Platno(Image img,boolean vykreslit) {
        this.img = img;
        this.vykreslit = vykreslit;        
    }
    public void paint(Graphics g){
        if(vykreslit){
        Dimension d = getSize();
        int sirka = (d.width>d.height)?d.width:d.height;
        g.drawImage(img,0,0,sirka,sirka,this);
        }        
    }   
}

package cizek.obrazky;

    import java.awt.*;
    import java.net.URL;
    
    public class Obrazky { 
        
        private Image[] img;
        private Image ikonka;      
        
    public Obrazky() {
        Toolkit t = Toolkit.getDefaultToolkit();
        img = new Image[6];
        
        URL url1 = getClass().getResource("jedna.png");
        img[0] = t.getImage(url1);
        URL url2 = getClass().getResource("dva.png");
        img[1] = t.getImage(url2); 
        URL url3 = getClass().getResource("tri.png");
        img[2] = t.getImage(url3); 
        URL url4 = getClass().getResource("ctyri.png");
        img[3] = t.getImage(url4); 
        URL url5 = getClass().getResource("pet.png");
        img[4] = t.getImage(url5); 
        URL url6 = getClass().getResource("sest.png");
        img[5] = t.getImage(url6);
        URL url7 = getClass().getResource("kostka.png");
        ikonka = t.getImage(url7); 
    }    
    
    public Image[] getAll(){
        return img;
    }
    public Image getIkonka(){
        return ikonka;
    }        
}
Java › překrytí objektů, jakto?
18. 8. 2014   #193158

Dobrý den, mám problém s tímto programem :/ Je to předepsaný program, který správně funguje, ale nevím si rady s významem s metodou vloz(), proč tento řádek "posledni = posledni.dalsi = new Uzel(vkladany);" přepíše i objekt "prvni",přesto že se tam vůbec o "prvni" nejedná, a zrovna i tu správnou větev "dalsi" ? Prosím o vysvětlení... 

Pro lepší pochopení programu je tady zadání: 

"Vytvořte třídu SpojovySeznam, která umí uchovávat prvky typu Object. Připravte metody void vloz(Object obj), Object vyjmiPrvniho() a void vypisSeznam()."

// univerzalni spojovy seznam

class Uzel {
  Object prvek;
  Uzel dalsi;

  Uzel(Object o) {
    prvek = o;
    dalsi = null;
  }

  Uzel(Object o, Uzel dalsiUzel) {
    prvek = o;
    dalsi = dalsiUzel;
  }

  Object getPrvek() { 
      return prvek; 
  }

  Uzel getDalsi() { 
      return dalsi; 
  }
}

class SpojovySeznam {
  private Uzel prvni, posledni;
  int pocet;

  SpojovySeznam() {
      prvni = posledni = null;  
      pocet = 0; 
  }

  public boolean jePrazdny() {
    return (prvni == null) ? true : false;
  }

  // vklada na konec
  public void vloz(Object vkladany) {
    if (jePrazdny() == true)
      prvni = posledni = new Uzel(vkladany);
    else
      posledni = posledni.dalsi = new Uzel(vkladany);
    pocet++;
  }

  public void vypisSeznam() {
    Uzel akt = prvni;
    while (akt != null) {
      System.out.println(akt.prvek.toString());
      akt = akt.dalsi;
    }
    System.out.println("Pocet prvku: " + pocet);
  }

  public Object vyjmiPrvniho() {
    Object o;
    if (jePrazdny() == true)
      return null;

    pocet--;
    o = prvni.prvek;
    if (prvni != posledni)
      prvni = prvni.dalsi;
    else
      prvni = posledni = null;

    return o;
  }

  public int getPocet() { return pocet; }
}

public class SpojovySeznamTest {
  public static void main(String[] args) {
    SpojovySeznam s = new SpojovySeznam();
    Integer i = new Integer(1);
    Double d = new Double(3.14);
    String a = "ahoj";
    s.vloz(i);
    s.vloz(d);
    s.vloz(a);
    s.vypisSeznam();
    s.vyjmiPrvniho();
    s.vypisSeznam();
  }
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý