簡體   English   中英

如何在 java 面板上移動圖形元素?

[英]How can I move a graphics element on my java panel?

我目前正在開發一個簡單的類似乒乓球的游戲,但我被定位矩形卡住了。 我想將它的 Y position 更改為實際面板高度的一半。

package com.game;
import javax.swing.*;
import java.awt.*;

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame("gEngine");
        Player playerOne = new Player(frame);
        Player playerTwo = new Player(frame);
    }
}


package com.game;

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

public class Player {
    public Player(JFrame frame) {
        MyPanel panel = new MyPanel();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBackground(Color.BLACK);
        frame.setSize(1280, 720);
        frame.setVisible(true);
    }
}
class MyPanel extends JPanel {
    public void paintComponent(Graphics g) {
        g.setColor(Color.WHITE);
        g.fillRect(50, 60, 20, 120);
    }
}

您的代碼有很多“問題”。 我建議你找一些教程之類的。 frame.setVisible(true)Player的 class 構造函數中的東西。 您是否意識到每次創建Player object 時,所有這些內容都會應用於JFrame 這是必要的嗎? 也許你應該只做一次。 此外,為了根據其 position 根據大小paint組件,您可以執行g.fillRect(50, getHeight() / 2, 20, 120);

public class Test {

    public static void main(String[] args) {
        JFrame frame = new JFrame("gEngine");
        Player playerOne = new Player();
        Player playerTwo = new Player();

        // Set the proper layout manager
        frame.setLayout(new GridLayout());

        frame.add(playerOne.getMyPanel());
        frame.add(playerTwo.getMyPanel());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBackground(Color.BLACK);
        frame.setSize(1280, 720);
        frame.setVisible(true);
    }

    public static class Player {
        private JPanel myPanel;

        public Player() {
            this.myPanel = new MyPanel();
        }

        public JPanel getMyPanel() {
            return myPanel;
        }

    }

    static class MyPanel extends JPanel {
        @Override
        public void paintComponent(Graphics g) {
            // let the component be painted "natural"
            super.paintComponent(g);
            // Do custom painting
            g.setColor(Color.WHITE);
            g.fillRect(50, getHeight() / 2, 20, 120);
        }
    }

}

編輯(基於評論):

背景是默認的,因為GridLayout將屏幕分成 2 個面板(在框架的中間)。 即使框架有BLACK背景,這 2 個面板也覆蓋了它。 所以你看到的背景來自面板,而不是框架。 為了改變它,你必須改變面板的背景(並使它們不透明):

static class MyPanel extends JPanel {
    public MyPanel() {
        super();
        setOpaque(true);
        setBackground(Color.BLACK);
    }

    @Override
    public void paintComponent(Graphics g) {
        // let the component be painted "natural"
        super.paintComponent(g);
        // Do custom painting
        g.setColor(Color.WHITE);
        g.fillRect(50, getHeight() / 2, 20, 120);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM