空布局上的Java图形

时间:2018-07-29 03:43:21

标签: java swing graphics layout-manager null-layout-manager

我在此面板上的最终游戏是,我有一个img图标,可以在屏幕上移动,当它们降落在我当前使用的按钮之一上时,新面板将打开,您会得到一个迷你游戏,即true /错误,迷宫或找词。

我目前在哪里... 我做了一个基本的空布局,并放置了按钮作为占位符,玩家图标将在其中打开下一个面板。

我正在尝试在屏幕上放置一个简单的矩形,该矩形将使用箭头键盘侦听器移动。我在线观看了有关如何创建和搜索数据库的教程。

我当前的代码仍然显示我的null布局以及地图img背景以及按钮上带有img图标的按钮。它不会显示我的矩形。

是的,我是一名学生,这是学校的一个项目,我希望您能为我在这里要尝试的三项主要工作提供正确的指导。 答:在屏幕上获取矩形并将其移动。 B.在矩形上获取图像图标。 C.我应该从哪里开始研究,以便当移动的物体碰到某个位置JLable,Jbutton,Janthing时,我想不起来如何调出已经制作好的新面板。

感谢您提供的所有帮助。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class map extends JPanel implements ActionListener, KeyListener{

    Timer t = new Timer(5,this);
    int x = 0, y = 0, velX = 0, velY = 0;
    JButton mapButton, worldCampusB, universityParkB, fayetteB, erieB, yorkB, 
            hazeltonB;  
    JLabel background;
    ImageIcon img;


    public map(){


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


        setBackground(new Color(9, 49, 98));  
        setLayout(new BorderLayout());
        ImageIcon oldmain = new ImageIcon("images/oldmain.jpg");
        ImageIcon hazelton = new ImageIcon("images/hazelton.jpeg");
        ImageIcon york = new ImageIcon("images/york.jpg");
        ImageIcon erie = new ImageIcon("images/erie.jpg");
        ImageIcon fayette = new ImageIcon("images/fayette.jpg");
        ImageIcon worldcampus = new ImageIcon("images/worldcampus.png");
        background = new JLabel(new ImageIcon("images/pennmap.jpg"));
        add (background);
        background.setLayout(null);       
        mapButton = new JButton("Map Menu: Click to return to main menu.");
        mapButton.setBounds(new Rectangle(300,20,300,50));
        worldCampusB = new JButton("World Campus");
        worldCampusB.setIcon(worldcampus);
        universityParkB = new JButton("University Park");
        universityParkB.setIcon(oldmain);
        fayetteB = new JButton("Fayette");
        fayetteB.setIcon(fayette);
        erieB = new JButton ("Erie");
        erieB.setIcon(erie);
        yorkB = new JButton ("York");
        yorkB.setIcon(york);
        hazeltonB = new JButton ("Hazelton");
        hazeltonB.setIcon(hazelton);
        background.add(mapButton);
        background.add(worldCampusB);
        background.add(universityParkB);
        background.add(fayetteB);
        background.add(erieB);
        background.add(yorkB);
        background.add(hazeltonB);
        //adjusted the button locations on the map - jpk5816
        worldCampusB.setBounds(new Rectangle (750,20,195,150));
        worldCampusB.setHorizontalTextPosition(JButton.CENTER);
        worldCampusB.setVerticalTextPosition(JButton.BOTTOM);
        universityParkB.setBounds(new Rectangle(380,250,175,140));
        universityParkB.setHorizontalTextPosition(JButton.CENTER);
        universityParkB.setVerticalTextPosition(JButton.BOTTOM);
        fayetteB.setBounds(new Rectangle(40,445,200,150));
        fayetteB.setHorizontalTextPosition(JButton.CENTER);
        fayetteB.setVerticalTextPosition(JButton.BOTTOM);
        erieB.setBounds(new Rectangle(50,100,175,170));
        erieB.setHorizontalTextPosition(JButton.CENTER);
        erieB.setVerticalTextPosition(JButton.BOTTOM);
        yorkB.setBounds(new Rectangle(625,460,185,130));
        yorkB.setHorizontalTextPosition(JButton.CENTER);
        yorkB.setVerticalTextPosition(JButton.BOTTOM);
        hazeltonB.setBounds(new Rectangle(690,190,170,140));
        hazeltonB.setHorizontalTextPosition(JButton.CENTER);
        hazeltonB.setVerticalTextPosition(JButton.BOTTOM);
    }
        public void paintCompent(Graphics g){
            super.paintComponent(g);
            g.setColor(new Color(9, 49, 98));
            g.fillRect(x, y, 50, 30);
        }
        public void actionPerformed(ActionEvent e){                        
            repaint();
            x += velX;
            y += velY;            
        }
        public void up(){
            velY = -1;
            velX = 0;
        }
        public void down(){
            velY = 1;
            velX = 0;
        }
        public void left(){
            velX = -1;
            velY = 0;
        }
        public void right(){
            velX = 1;
            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_LEFT){
                left();
            }
            if (code == KeyEvent.VK_RIGHT){
                right();
            }

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

}

2 个答案:

答案 0 :(得分:1)

您的JLabel的ImageIcon已添加到图形JPanel,$check = password_verify( $password, $hashedPasswordFromDatabase ); 或地图JPanel(应重命名为“ Map”),因此地图中的任何图形都不会显示。但是为什么要这样做呢?当您已经覆盖了地图的paintComponent时,为什么将JLabel和ImageIcon用作背景图像?更好的解决方案是摆脱背景JLabel,仅在map的paintComponent方法中绘制该图像,然后在其后绘制矩形。

this

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(backgroundImg, 0, 0, this); // draw image
    g.setColor(new Color(9, 49, 98));
    g.fillRect(x, y, 50, 30);
}

答案 1 :(得分:0)

找到了一种绘制图像的方法,对于其他答案中的初学者来说,这并不是一个奇怪的主意。

CustomFields[0].Value

在map.java中,这是我想要绘制img的地方。

ViewModel

这个问题还有很多,但似乎对此没有太大兴趣,因此我将在此结束。因为这是我制作这个游戏的迷你项目中的第一个障碍。