#12 sleepy
Ok, moc díky. Nyní je mi to mnohem jasnější a už s tím dokáži o něco lépe pracovat. Díky! :)
Příspěvky odeslané z IP adresy 195.26.25.–
#9 sleepy
Ano, to je můj problém. Vykresluji obrázek, kterým chci pohybovat, ale místo toho se vykresluje na novo. Předtím jsem omylem repaint volal někde jinde, proto vše zmizelo, ale teď, když volám repaint na správném místě, tak bez efektu obrázek je stejně vykreslen mnohokrát. Takže mi stačí akorát zavolat flush? A kde ho mám zavolat? Když jsem to zatím zkoušel v metodě paint, tak mi to IDE podtrhal.
A ano, anotace @Override mi při Graphics2D hází chybu, předtím neházel, protože už jsem tam měl pouze Graphics.
#5 sleepy
Díky za odpověď. Tohle chápu a upravil jsem tu metodu paint podle toho jak jsi napsal. Ale stále bez výsledku, program se chová stejně, zkusil jsem i použít @Override anotaci a IDE (používám netbeans) mi to nepodtrhlo a šlo to i zkompilovat.
Díky za odpověď, ale stále tomu nerozumím. Když to teda nekreslím do paint, tak kam to tedy v tomto případě kreslím? A jak docílím toho, abych to tedy kreslil do paint? Aby mi to tedy nemizelo. Zkoušel jsem to upravit, ale stále žádný posun.
public class Grafika extends JPanel {
Image img1 = Toolkit.getDefaultToolkit().getImage("src/img/test2.png");
private int x = 0, y = 0;
public void paint(Graphics2D g2d) {
super.paint(g2d);
g2d.drawImage(img1, x, y, null);
}
public void moveH() {
x += 10;
}
}
Když v této třídě kdekoliv zavolám repaint vůbec nic se nestane.
A jinak volám odsud
private void formKeyPressed(java.awt.event.KeyEvent evt) {
switch(evt.getExtendedKeyCode()) {
case KeyEvent.VK_D:
grafika.moveH();
grafika.paint((Graphics2D)jPanel1.getGraphics());
break;
}
}
Když volám repaint tady, tak všechno zmizí.
Zkoušel jsem se i dívat na různé tutoriály, ale žádná úprava mého kódu mi prostě nefungovala.
Zdravím, mám opět jeden problém s Javou.
Potřebuji vykreslit obrázek, který mám zde
public void paint(Graphics2D g2d) {
g2d.drawImage(img1, x, y, null);
}
A potřebuji s ním hýbat, to dělám tak, že měním souřadnice x a y. Ale vždy když zavolám tuto metodu, tak se obrázek vykreslí znovu, ale já potřebuji, aby se pouze překresloval. Také jsem zkoušel z místa volání metody volat i repaint(), ale to mi pak zmizelo úplně vše.
Grafice v Javě moc nerozumím, takže prosím o radu. Předem děkuji za odpověď
Dobrý den. Pracuji na jednom programu, kde se začíná v menu a po kliknutí na button a chci, aby se mi vykreslily určité objekty, které už jsem si vytvořil v jiné třídě. Problém je, že místo vykreslení mi to jen tak probliklo a nic tam vykreslené nezůstalo. zde kód
CardLayout card = (CardLayout)(jPanel3.getLayout());
card.next(jPanel3);
polehodnot.cleanValue();
mrizka.paintComponent(jPanel2.getGraphics());
Toto je vnitřek metody která se vykoná po kliknutí na button. Přepne se do dalšího panelu v Layoutu, kde se má vykreslit mrizka. To je v pořádku. To se přepne, ale to, co se má vykreslit pod mrizkou se nevykreslí, maximálně jen problikne.
Avšak podařilo se mi to "obejít" jednoduše tak, že před řádkem jsem měl umístěný JOptionPane. Pak kód vypadá takto
CardLayout card = (CardLayout)(jPanel3.getLayout());
card.next(jPanel3);
polehodnot.cleanValue();
JOptionPane.showMessageDialog(newGame1, "Zvolil/a jste si hru pro jednoho hráče", "Nová hra", JOptionPane.INFORMATION_MESSAGE);
mrizka.paintComponent(jPanel2.getGraphics());
A toto mi správně funguje! Všechno se správně vykreslí, když kód vypadá takto.
Problém je, že nechápu proč tomu tak je a také to, že bych se toho JOptionPane potřeboval zbavit, ale potřebuji zachovat funkčnost.
Budu vděčný, kdyby mi to někdo dokázal objasnit a pomoci :)
Ok, vyřešeno.
Děkuji moc, opravdu jsi mi velmi pomohl :)
Díky moc. Naprostá pravda. Mám to jako třídu JFrame ve které jsem měl i nějaké objekty(jButton), když jsem je odstranil, tak už to pracuje jak má :)
Ale ještě bych měl jednu otázku. Když totiž nějaké objekty znovu přidám, tak to opět nefunguje. Je nějaká možnost jak tam mít ty objekty, a aby mi v tom zároveň nedělaly tu paseku?
Díky za rady. Kód jsem tedy přizpůsobil do této podoby, ale stále nechce fungovat
public class menuGUI extends javax.swing.JFrame {
/**
* Creates new form menuGUI
*/
public int hrX = 0;
public menuGUI() {
initComponents();
this.addKeyListener(ka);
}
KeyAdapter ka = new KeyAdapter(){
@Override
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_M){
hrX += 1;
}
}
};
}
Dobrý den,
V Javě jsem začal teprve nedávno, takže se v ní ještě úplně neorientuji a narazil jsem na problém, který nejsem schopen vyřešit sám.
Nějak mi nejde, aby mi fungoval KeyPressed. V současné době to tak testuji, takže se momentálně snažím docílit toho, aby se mi při stisku klávesy M zvedala proměnná, kterou jsem si deklaroval, o jednu hodnotu.
Kód zde:
public class menuGUI extends javax.swing.JFrame {
/**
* Creates new form menuGUI
*/
public int hrX = 0;
public menuGUI() {
initComponents();
this.addKeyListener(ka);
}
KeyAdapter ka = new KeyAdapter(){
public void KeyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_M){
hrX =+ 1;
}
}
};
}
Nic se mi nepodtrhává, žádný error, ale prostě to nefunguje a za boha nejsem schopen přijít na to, kde bych tam mohl mít chybu, nebo co by mi tam mohlo chybět. Proto prosím o nějakou radu.