我有一个代码工作,显示虚拟地球的演变。 我正在使用JFrame和bufferedStrategy绘制这个世界。
我想在它旁边绘制的世界之上添加两个可能影响地图的按钮。
这是我的尝试:
public class Window extends JFrame{
private BufferStrategy bs;
private Planete plan;
private Canvas canvasDroite = new Canvas();
private JPanel panelGauche = new JPanel();
final JButton btn = new JButton("Test");
final JButton btn2 = new JButton("Test 2");
public Window(String name, Planete p){
this.setTitle(name);
canvasDroite.setSize(new Dimension(Constante.longueur ,Constante.largeur));
this.setSize(1600,900);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setVisible(true);
//this.setLayout(new BorderLayout());
canvasDroite.createBufferStrategy(3);
bs = canvasDroite.getBufferStrategy();
frameOrganize();
plan = p;
}
public void frameOrganize(){
//panelGauche.add(btn);
//panelGauche.add(btn2);
this.add(canvasDroite);
//this.add("West",panelGauche);
}
public void draw()
{
Graphics2D g = null; //pointeur de l'outil de dessin
do{
try{
g = (Graphics2D)bs.getDrawGraphics();
if(plan != null)
plan.draw(g);
}
finally
{
g.dispose();
}
bs.show();
} while (bs.contentsLost());
}
}
当只有框架一切正常时
我试图在JPanel中创建bufferedStrategie,但它不起作用,我只使用g.drawLine()(当我执行plan.draw(g))来更改地图,所以我试图放弃bufferStrategy并直接绘制到JPanel但我没有成功
我对Canvas的尝试也不起作用,窗口出现但没有画出来。
我还尝试对Canvas和JPanel使用paint()和repaint()。
PS:我看了很多帖子,但我从来没有见过什么时候使用paint(图形g)方法让JPanel开始绘画,这就是我使用bufferstrategy的原因,它是什么?在我看来更容易。答案 0 :(得分:-1)
我弄错了解决方案!这是我的代码,如果有人需要它,我的mystake是我不明白如何使用JPanel的paintComponent;
public class Window extends JFrame{
private BufferStrategy bs;
private Planete plan;
private JPanel panelDroite = new JPanel();
private JPanel panelGauche = new JPanel();
final JButton btn = new JButton("yolo");
final JButton btn2 = new JButton("yolo 2");
public Window(String name, Planete p){
this.setTitle(name); //titre de fenetre
panelDroite.setSize(new Dimension(Constante.longueur ,Constante.largeur)); //change la taille
this.setSize(1600,900);
this.setLocationRelativeTo(null); //place au centre
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //quitte avec la croix
this.setResizable(false); //empeche resize
organisageFenetre();
this.setVisible(true); //rend visible
//this.setLayout(new BorderLayout());
plan = p;
}
//Créer un update
public void organisageFenetre(){
//panelGauche.add(btn);
//panelGauche.add(btn2);
this.add(panelDroite);
//this.add("West",panelGauche);
}
public void paintComponent()
{
//dessine toute la fenetre
Graphics g = null; //pointeur de l'outil de dessin
try{
g = (Graphics)panelDroite.getGraphics(); //recupere l'outil de dessin de la fenetre de dessin
if(plan != null)
plan.draw(g);
}
finally
{
panelDroite.repaint();
g.dispose(); //termine l'utilisation de l'outil de dessin
}
}
}