Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两个JFrame的问题_Java_Swing - Fatal编程技术网

Java 两个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

我有两个这样的对象(两个球),但它们在两个不同的JFrame中

如何将它们组合在一个JFrame中

我试图将另一个对象放到这个类中,但是
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