Недавно я начал создавать Редактор карт для своей игры, и я столкнулся с несколькими проблемами, которые я как бы исправил. Моя текущая проблема прямо сейчас заключается в том, что у меня есть JFrame (основной интерфейс). Внутри этого JFrame у меня есть JScrollPane, в котором хранится мой клиент (JPanel). Так как я не могу опубликовать изображение, я отправлю ссылку на изображение. Изображение GUI: http://i.imgur.com/yPNAlYS.pngJScrollPane, несущий JPanel, является ошибкой
Здесь я добавляю своего клиента (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 (Графика g) { \t \t super.paintComponent (g); \t \t Graphics2D gg = (Graphics2D) g; \t map.drawCurrentMap (gg); \t} – Yuriah
Да, но я делаю 'paintComponent'' protected ', нет причин, чтобы кто-либо еще вызывал ваш метод;) – MadProgrammer
Aha XD Еще раз спасибо, исправил мою проблему. – Yuriah