BorderLayout用于对象

时间:2014-05-24 17:34:18

标签: java swing jframe jpanel paintcomponent

我试图创建一个小型Java游戏。在回答之前,布局管理器是将多个对象(如精灵)添加到单个JFrame的最佳方法吗?如果是,那我需要帮助:

以下是代码的输出:http://prntscr.com/3m685d

正如您所看到的,每个组件都显示在小型容器中。但他们不应该是!如何增加容器的大小?我是Java的新手,所以我可能会说错了。

我会非常欣赏一个迷你示例程序,展示如何将2个精灵添加到单个JFrame中。

以下是代码:

main.java - > main方法类+ JFrame / JPanel构造函数

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class main {

public static void main(String[] args) {

    Infout m = new Infout();
    obj2 o = new obj2();
    JFrame f = new JFrame();
    JPanel start = new JPanel();
    JPanel start2 = new JPanel();

    start.add(m);
    start2.add(o);

    f.add(start,BorderLayout.LINE_START);
    f.add(start2, BorderLayout.LINE_END);
    f.setVisible(true);
    f.setSize(300, 400);

}

}

Infout.java - >键盘可控圆+静态矩形构造函数类

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

public class Infout extends JPanel implements ActionListener, KeyListener {

    Timer t = new Timer(5, this);
    double x = 0, y = 0, velx = 0, vely = 0;

    public Infout(){

        t.start();
        addKeyListener(this);
        setFocusable(true);
        setFocusTraversalKeysEnabled(false);

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        g2.fill(new Ellipse2D.Double(x, y, 40, 40));
        g2.fill(new Rectangle2D.Double(0, 270, 300, 5));
        g2.fill(new Rectangle2D.Double(140, 270, 5, 300));
        g2.fill(new Rectangle2D.Double(140, 60, 70, 5));
        g2.fill(new Rectangle2D.Double(50, 140, 5, 70));
        g2.fill(new Rectangle2D.Double(150, 130, 5, 40));
        g2.fill(new Rectangle2D.Double(190, 210, 40, 5));
        if (x >= 120 && y >= 270) {
            System.out.println("sum1 has reached tha corner");
            g.drawString("You win!",115,35);
        }
        if (x <= 120 && y >= 270) {
            System.out.println("sum1 has reached tha corner");
            g.drawString("You lose!",115,35);
        }
        if (x == 120 && y >= 270){
            velx = 0;
            vely = 0;
        }
        if (x == 31.5 && y <= 200 && y >= 100){
            velx = 0;
        }
        if (x == 132 && y <= 170 && y >= 100){
            velx = 0;
        }
        if (x <= 190 && x >= 120 && y == 42){
            velx = 0;
        }
        if (x <= 210 && x >= 171 && y == 192){
            velx = 0;
        }

    }


    public void actionPerformed(ActionEvent e) {

        System.out.println("x "+x+"y "+y);

        repaint();
        x += velx;
        y += vely;

        if (x < 0 || x > 260)
        {
            velx = 0;
            vely = 0;
        }
        if (y < 0 || y > 340)
        {
            velx = 0;
            vely = 0;
        }
    }

    public void up() {
        vely = -1.5;
        velx = 0;
    }

    public void down() {
        vely = 1.5;
        velx = 0;
    }

    public void left() {
        velx = -1.5;
        vely = 0;
    }

    public void right() {
        velx = 1.5;
        vely = 0;
    }

    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
        if (code == KeyEvent.VK_UP) {
            up();
        }
        if (code == KeyEvent.VK_DOWN) {
            down();
        }
        if (code == KeyEvent.VK_RIGHT) {
            right();
        }
        if (code == KeyEvent.VK_LEFT) {
            left();
        }

    }

    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
 }

obj2.java - &gt; Rectangle构造函数类

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;


public class obj2 extends JPanel{

public void paintComponent(Graphics g){
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    g2.fill(new Rectangle2D.Double(0, 0, 50, 50));
}

}

谢谢!

我再说一遍,我会非常欣赏一个迷你示例程序,展示如何将2个精灵添加到单个JFrame中。

-Ab

0 个答案:

没有答案