Paneelien rakenne:
GUI | GUI.contentPane(backGround) | ' ' ' ' ' ' ' ' ' ' ' ' ' | ' ' ' ' ' panel1' ' ' ' ' ' panel2 | ' ' ' ' ' ' ' ' ' ' ' ' ' | ' ' ' ' ' * ' ' ' ' ' ' ' grafiikka ' ' ' ' ' ' ' ' ' ' ' ' ' ' | ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' X ' ' ' ' '
'grafiikka'-paneeli on extended JPanel, jolle piirretään seuraavalla tavalla paintComponent @Override tapahtuessa:
private void doDrawing(Graphics g) { Graphics2D g2d = (Graphics2D) g; //tekstuurin määrittely texture_test = new TexturePaint(imgBuffer_test, new Rectangle(0, 0, this.width, this.height)); //tämän halutaan näkyvän g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f)); //apply g2d.setPaint(texture_test); //kuvan rullaus (epäkesko että nähdään piirtyykö alle jäävä alue, koska objekti on pyöreä g2d.rotate(Math.toRadians(this.angle), 20 ,50); //piirretään ympyrän edelläm. asetuksilla g2d.fillOval(1, 1, this.width -2, this.height-2); //turhat pois g2d.dispose(); } @Override public void paintComponent(Graphics g) { //oma instanssi Graphics2D g2d = (Graphics2D) g; //tausta veks g2d.setComposite ( AlphaComposite.getInstance ( AlphaComposite.SRC_OVER, 0.0f ) ); //piirto super.paintComponent(g); //roinaa taustan päälle doDrawing(g); //turhat pois g2d.dispose(); }
kun muutan kulmaa vaikka komennolla reDraw(getGraphics());
joka kutsuu,
private void reDraw(Graphics g) { //asd if (g != null) { //request että 'grafiikka'-luokka(?) piirretään uusiksi repaint(0,0,width,height); } }
mutta ei suinkaan tapahdu mitä pitäis... kuvassa fail
Miksi ? Miten saan ton piirtämään kunnolla sen sijaan että sä räveltää tohon jotain täysin luonnotonta!
En ymmärrä, mitä varten reDraw-funktiolla on tuollainen parametri ja mistä oikein revit sille arvon tai miksi ylipäänsä sinulla on tuollainen reDraw-funktio. Komponentin päivittämiseen ei tarvita mitään getGraphics-kutsua.
Koitin tossa niin pitkään kaikenlaista että nähtävästi oon survonu sinne kourakaupalla myös epäolennaisuuksia.
Regardless, tulos on aina sama tai ei päivitystä.
Kuten näät ei kyseisessä voidissa edes käytetä tuota parametriä mihinkään :)
edit: saman tuloksen saa vaikka kutsuu suoraan
repaint(); //tai repaint(x,y,width,height);
nämä "g2d.dispose();" rivit vaikuttavat erittäin epäilyttäviltä. Huomioi se, että rivi "Graphics2D g2d = (Graphics2D) g;" ei suinkaan luo uutta objektia, vaan ainoastaan castaa 'g'-muuttujan tyypin Graphics2D:ksi, ja asettaa sen arvon g2d:hen. Koita ottaa nuo rivit pois, ja katso vaikuttaako.
jotennii haiskahtaa nyt siltä että nuita piirtopintoja ei hanskata oikein. Taitaa tuo nappi tulla piirretyksi sille piirtopinnalle jota viimeksi ollaan käpistelty?
Itellä on tosin vähän aikaa (pari vuotta) kun viimeksi olen javalla mitään tehnyt.
Mutta tuo koodinpätkä ei taida nyt sisältää ihan kaikkea oleellista ongelmaan liittyvää.
Kiitos vastauksista,
Sain selvitettyä että jostain syystä kuvan kaltainen tapaturma saadaan aikaiseksi kun repaint(); ajetaan pinnalle johon pallo piirretään.
Sen sijaan panel2.repaint(); (joka on siis paneli jossa on paneli pallolle) saa aikaan oikeanlaisen tuloksen.
ymmärtääkseni tämä repaint(); on pelkkä liputus ohjelmalle, että tiedetään pinnan olevan likainen ja kaikki elementit sillä piirretään uudestaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.