java - I can't tell why this isn't working. My mouse listener in my JPanel works fine, but my key listener doesn't -
my jpanel has keylistener , mouselistener. mouselistener works fine, keylistener doesn't work @ all. have never had problem before. here code of jpanel , main class.
main:
import java.awt.borderlayout; import java.awt.dimension; import java.awt.toolkit; import javax.swing.*; public class levelbuilderframe { public static void main(string[] args) { jframe frame = new jframe("2d level builder"); jpanel mainpanel = new jpanel(); jtoolbar toolbar = new jtoolbar(); jscrollpane scrollpane = new jscrollpane(); levelbuilderpanel lbp = new levelbuilderpanel(); dimension screensize = toolkit.getdefaulttoolkit().getscreensize(); frame.setjmenubar(new menu()); scrollpane.setpreferredsize(lbp.getsize()); scrollpane.getviewport().add(new levelbuilderpanel()); toolbar.add(new levelobjectselector()); mainpanel.setlayout(new borderlayout()); mainpanel.add(scrollpane, borderlayout.center); mainpanel.add(toolbar, borderlayout.north); lbp.setfocusable(true); lbp.requestfocusinwindow(); frame.setsize((int)screensize.getwidth(), (int)screensize.getheight()); frame.setcontentpane(mainpanel); frame.setvisible(true); } } panel:
import java.awt.alphacomposite; import java.awt.dimension; import java.awt.graphics; import java.awt.graphics2d; import java.awt.rectangle; import java.awt.renderinghints; import java.awt.toolkit; import java.awt.event.keyevent; import java.awt.event.keylistener; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.event.mousemotionlistener; import java.io.file; import java.io.filenotfoundexception; import java.io.filewriter; import java.io.ioexception; import java.io.printwriter; import java.util.arraylist; import java.util.scanner; import javax.swing.*; import objects.levelobject; import objects.platform; public class levelbuilderpanel extends jpanel implements keylistener, mouselistener, mousemotionlistener { private static final long serialversionuid = 1l; static string levelobject = ""; private int selectedobject; static boolean selectortool = false; private float scale = 1; private levelobject lo; private rectangle mouserect; dimension screensize = toolkit.getdefaulttoolkit().getscreensize(); static arraylist<levelobject> level = new arraylist<levelobject>(); public levelbuilderpanel() { this.addkeylistener(this); this.addmouselistener(this); this.addmousemotionlistener(this); this.setfocusable(true); this.requestfocus(); } public void paintcomponent(graphics g) { super.paintcomponent(g); graphics2d g2 = (graphics2d) g; g2.scale(scale, scale); if (level.size() != 0) { (int = 0; < level.size(); i++) { g2.drawimage(level.get(i).getimage(), level.get(i).getx(), level.get(i).gety(), level.get(i).getwidth(), level .get(i).getheight(), null); g2.setcomposite(alphacomposite.src); g2.setrenderinghint(renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); g2.setrenderinghint(renderinghints.key_rendering, renderinghints.value_render_quality); g2.setrenderinghint(renderinghints.key_antialiasing, renderinghints.value_antialias_on); } } if (lo != null) g2.drawimage(lo.getimage(), lo.getx(), lo.gety(), lo.getwidth(), lo.getheight(), null); if (selectortool) g2.draw(level.get(selectedobject).getrect()); (int = 0; < 1500; += 10) { g2.drawline(i, 0, i, 2000); g2.drawline(0, i, 2000, i); } } @override public dimension getpreferredsize() { dimension size = new dimension((int) (screensize.getwidth() * 0.90), (int) (screensize.getheight() * 0.90)); size.width = math.round(size.width * scale); size.height = math.round(size.height * scale); return size; } @override public void mouseclicked(mouseevent e) { } @override public void mouseentered(mouseevent e) { } @override public void mouseexited(mouseevent e) { } @override public void mousepressed(mouseevent e) { if (selectortool) { (int = 0; < level.size(); i++) { if (mouserect.intersects(level.get(i).getrect())) selectedobject = i; } } repaint(); } @override public void mousereleased(mouseevent e) { int x = (int) (math.round((e.getx() + 5) / 10.0) * 10.0) - 10; int y = (int) (math.round((e.gety() + 5) / 10.0) * 10.0) - 10; if (levelobject.equalsignorecase("grassplatform")) { level.add(new platform("images\\platform.png", x, y, 20, 10, true)); } repaint(); } @override public void mousedragged(mouseevent e) { mouserect = new rectangle(e.getx(), e.gety(), 1, 1); int x = (int) (math.round((e.getx() + 5) / 10.0) * 10.0) - 10; int y = (int) (math.round((e.gety() + 5) / 10.0) * 10.0) - 10; if (selectortool) { (int = 0; < level.size(); i++) { if (mouserect.intersects(level.get(i).getrect())) selectedobject = i; } level.get(selectedobject).setx(x); level.get(selectedobject).sety(y); } repaint(); } @override public void mousemoved(mouseevent e) { mouserect = new rectangle(e.getx(), e.getx(), 1, 1); int x = (int) (math.round((e.getx() + 5) / 10.0) * 10.0) - 10; int y = (int) (math.round((e.gety() + 5) / 10.0) * 10.0) - 10; if (levelobject.equalsignorecase("grassplatform")) { lo = new platform("images\\platform.png", x, y, 20, 10, true); } else lo = null; repaint(); } @override public void keypressed(keyevent e) { int key = e.getkeycode(); if (key == keyevent.vk_right && selectortool) { level.get(selectedobject).setx( level.get(selectedobject).getx() + 10); } else if (key == keyevent.vk_left && selectortool) { level.get(selectedobject).setx( level.get(selectedobject).getx() - 10); } else if (key == keyevent.vk_up && selectortool) { level.get(selectedobject).sety( level.get(selectedobject).gety() - 10); } else if (key == keyevent.vk_left && selectortool) { level.get(selectedobject).sety( level.get(selectedobject).gety() + 10); } else if (key == keyevent.vk_delete && selectortool) { level.remove(selectedobject); } revalidate(); repaint(); } @override public void keyreleased(keyevent e) { } @override public void keytyped(keyevent e) { } static void save(file file) { printwriter writer = null; try { writer = new printwriter(new filewriter(file)); } catch (ioexception e) { e.printstacktrace(); } (int = 0; < level.size(); i++) writer.println(string.valueof(level.get(i).getname() + " " + level.get(i).getimagename() + " " + level.get(i).getx() + " " + level.get(i).gety() + " " + level.get(i).getwidth() + " " + level.get(i).getheight() + " " + level.get(i).issolid())); writer.close(); joptionpane.showmessagedialog(null, "file saved"); } static void load(file file) { scanner sc = null; try { sc = new scanner(file); } catch (filenotfoundexception e) { e.printstacktrace(); } level.clear(); while (sc.nextline() != null) { if (sc.next().equals("platform")) { level.add(new platform(sc.next(), integer.parseint(sc.next()), integer.parseint(sc.next()), integer.parseint(sc.next()), integer.parseint(sc.next()), boolean.valueof(sc.next()))); } } sc.close(); } } please help! :)
Comments
Post a Comment