最近我開始爲我的遊戲製作地圖編輯器,並且遇到了一些我已經修復的問題。我目前的問題是我有一個JFrame(主界面)。在該JFrame中,我有一個包含我的客戶端(JPanel)的JScrollPane。由於我無法發佈圖片,因此我會發布圖片鏈接。 GUI的圖像:http://i.imgur.com/yPNAlYS.pngJScrollPane持有JPanel是buggy
這是我將我的客戶端(JPanel)添加到JScrollPane的地方。
//======== mainScrollPane ========
{
client.setPreferredSize(client.getSize());
mainScrollPane.setPreferredSize(client.getSize());
mainScrollPane.setViewportView(client);
mainScrollPane.add(client);
這是我Client.java |的MapEditor類是有點大,張貼在這裏,但隨時索要片段或再信息。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
public class Client extends JPanel implements Runnable, MouseListener, MouseMotionListener {
private static final long serialVersionUID = 1L;
private Thread animationThread;
protected Map map;
private Tile tile;
public int mX, mY;
public Client() {
init();
setVisible(true);
setFocusable(true);
animationThread = new Thread(this);
animationThread.start();
}
public void init() {
addMouseListener(this);
addMouseMotionListener(this);
ImageHandler.loadImages();
map = new Map();
setSize(1000, 500);
}
public void run() {
while (animationThread != null) {
repaint();
try {
Thread.sleep(4);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void paint(Graphics g) {
Graphics2D gg = (Graphics2D) g;
map.drawCurrentMap(gg);
}
@Override
public void mouseClicked(final MouseEvent e) {
//final Point p = e.getPoint();
//final int x = p.x/25;
//final int y = p.y/25;
//map.getTileAt(x, y).setGraphicId(MapEditor.id);
//map.getTileAt(x, y).setBlocked(true);
map.getTiles().set(map.getTileIndex(mX, mY), new Tile(mX, mY, true, MapEditor.id));
System.out.println(map.getTiles().get(map.getTileIndex(mX, mY)).toString());
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {;
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
mX = e.getX()/25;
mY = e.getY()/25;
}
}
謝謝您的回答!看,我不知道。我一直認爲我可以在任何地方使用paint()。我不知道JPanel擠滿了paintComponent。 這就是我現在的痛苦。這是你想讓我改變它嗎? public void paintComponent(Graphics g){ \t \t super.paintComponent(g); \t \t Graphics2D gg =(Graphics2D)g; \t map.drawCurrentMap(gg); \t} – Yuriah
是的,但我使'paintComponent'' protected',沒有任何其他人調用您的方法的原因;) – MadProgrammer
Aha XD再次感謝人,解決了我的問題。 – Yuriah