Java 两个JFrame的问题
我有两个这样的对象(两个球),但它们在两个不同的JFrame中 如何将它们组合在一个JFrame中 我试图将另一个对象放到这个类中,但是Java 两个JFrame的问题,java,swing,Java,Swing,我有两个这样的对象(两个球),但它们在两个不同的JFrame中 如何将它们组合在一个JFrame中 我试图将另一个对象放到这个类中,但是repaint()方法给了我一些问题 public class palla extends JFrame implements ActionListener { public JPanel contentPane; private Image bufferVirtuale; private Graphics offScreen; private Timer t
repaint()
方法给了我一些问题
public class palla extends JFrame implements ActionListener
{
public JPanel contentPane;
private Image bufferVirtuale;
private Graphics offScreen;
private Timer tim = null;
private int xPallina = 0;
private int yPallina = 0;
private int diametroPallina = 40;
private int spostamento = 2;
private int Delay = 10;
private boolean destra,basso;
public palla()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(500, 200, 500, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
destra = true;
basso = true;
tim = new Timer(Delay,this);
tim.start();
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
bufferVirtuale = createImage(getWidth(),getHeight());
offScreen = bufferVirtuale.getGraphics();
Graphics2D screen = (Graphics2D) g;
offScreen.setColor(new Color(254,138,22));
offScreen.fillOval(xPallina,yPallina,diametroPallina,diametroPallina);
screen.drawImage(bufferVirtuale,0,0,this);
offScreen.dispose();
}
public void actionPerformed(ActionEvent e)
{
if(basso)
{
if(yPallina > (this.getHeight()-45))
{
basso = false;
yPallina -= spostamento;
}
else
{
yPallina += spostamento;
}
}
else
{
if(yPallina < 25)
{
basso = true;
yPallina += spostamento;
}
else
{
yPallina -= spostamento;
}
}
//il controllo differente avviene a differenza del pannello server,se la pallina colpisce il margine destro. Mentre nel
//pannello server se la pallina colpiva il margine destro avveniva il trasferimento,qui invece la pallina deve rimbalzare
if(!destra)//perciò se la pallina va verso sinistra
{
if(xPallina < 5)//se la pallina raggiunge il margine sinistro e arrivo comunicato è falso
{
destra = true;
xPallina += spostamento;
}
else//se invece la pallina sta andando verso sinistra ma ancora non ha colpito il margine
{
xPallina -= spostamento;//viene diminuita la sua posizione di "spostamento"-pixel
if(xPallina < 0)//se però raggiunge il margine sinistro
{
destra = true;
xPallina += spostamento;
}
}
}
else//se invece la pallina va a destra
{
if(xPallina > (this.getWidth()-45))//si controlla se colpisce il margine destro
{
destra = false;//si fa cambiare direzione,va a sinistra
xPallina -= spostamento;//e si diminuisce le coordinate delle X
}
else//altrimenti se non ha colpito ancora il margine si aumento le coordinate
{
xPallina += spostamento;
}
}
repaint();
}
公共类palla扩展JFrame实现ActionListener
{
公共JPanel内容窗格;
私有镜像缓存;
屏幕外的私人图形;
专用定时器tim=null;
私有int xPallina=0;
私有int yPallina=0;
私有内部diametroPallina=40;
私人int spostamento=2;
专用int延迟=10;
私人布尔destra,basso;
公共帕拉()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(500200500400);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setLayout(新的BorderLayout(0,0));
setContentPane(contentPane);
destra=真;
低音=真;
tim=新定时器(延迟,此);
tim.start();
}
公共空间更新(图g)
{
油漆(g);
}
公共空间涂料(图g)
{
bufferVirtuale=createImage(getWidth(),getHeight());
offScreen=bufferVirtuale.getGraphics();
图形2d屏幕=(图形2d)g;
屏幕外设置颜色(新颜色(254138,22));
屏幕外填充(xPallina、yPallina、diametroPallina、diametroPallina);
screen.drawImage(bufferVirtuale,0,0,this);
offScreen.dispose();
}
已执行的公共无效操作(操作事件e)
{
中频(低音)
{
如果(yPallina>(this.getHeight()-45))
{
basso=假;
yPallina-=spostamento;
}
其他的
{
yPallina+=spostamento;
}
}
其他的
{
如果(yPallina<25)
{
低音=真;
yPallina+=spostamento;
}
其他的
{
yPallina-=spostamento;
}
}
//在帕丽娜·科尔皮斯(pallina colpisce)和玛金·德斯特罗(margine destro.Mentre nel)所在的帕尼诺(pannello)不同服务器的控制下
//pannello服务器位于pallina colpiva和margine destro avveniva和trasferimento之间,用于pallina开发项目
如果(!destra)//perciòse la pallina va verso sinistra
{
如果(xPallina<5)//se la pallina raggiunge il margine sinistro e arrivo communicatoèfalso
{
destra=真;
xPallina+=spostamento;
}
其他//如果您的头发是红色的,那么您的头发是红色的,而不是黑色的
{
xPallina-=spostamento;//viene diminuita la sua posizione di“spostamento”-像素
if(xPallina<0)//se peròraggiunge il margine sinistro
{
destra=真;
xPallina+=spostamento;
}
}
}
否则//se invece la pallina va a destra
{
如果(xPallina>(this.getWidth()-45))//si controlla se colpisce il margine destro
{
destra=false;//si fa cambiare direzione,va a sinistra
xPallina-=spostamento;//e si diminuisce le坐标delle X
}
else//altrimenti se non-ha colpito ancora il margine si aumento le coordination
{
xPallina+=spostamento;
}
}
重新油漆();
}
}不要覆盖JFrame上的update()和paint()。这不是定制绘画的方式
如何在jframe中绘制两个不同的对象
自定义绘制是通过重写JPanel的paintCoponent()
方法完成的,然后将面板添加到框架中。阅读Swing教程中关于工作示例的部分,以开始学习
要在同一面板上绘制多个对象,您可以查看两种常见的方法。不要覆盖JFrame上的update()和paint()。这不是定制绘画的方式
如何在jframe中绘制两个不同的对象
自定义绘制是通过重写JPanel的paintCoponent()
方法完成的,然后将面板添加到框架中。阅读Swing教程中关于工作示例的部分,以开始学习
要在同一面板上绘制多个对象,您可以查看两种常见的绘制方法。1。有点不清楚你在问什么(你提到结合了两件事,但似乎只有一件事被贴了出来)
但是repaint()方法给了我一些问题。
什么问题?3.我强烈建议绘制一个轻量级组件(例如JPanel
),并覆盖它的paintComponent
方法。这两个对象是相同的。当mousemoded时,我希望只重新绘制一个对象,而当我在mousemoded调用repaint方法时,它会重新绘制两个对象。我不知道现在是否清楚。我不知道现在是否清楚
对不起,但不是真的。现在提到mouseMoved
有点困惑,因为你的代码中没有MouseListener
。最后一个问题:如何在JFrame中绘制两个不同的对象1)请参见2)查看我不再费心解决的问题。1。有点不清楚你在问什么(你提到结合了两件事,但似乎只有一件事被贴了出来)但是repaint()方法给了我一些问题。
什么问题?3.我强烈建议绘制一个轻量级组件(例如JPanel
),并覆盖它的paintComponent
方法。这两个对象是相同的。当mousemoded时,我希望只重新绘制一个对象,而当我在mousemoded调用repaint方法时,它会重新绘制两个对象。我不知道现在是否清楚。我不知道现在是否清楚
对不起,但不是真的。现在提到mouseMoved
,有点困惑,因为代码中没有MouseListener