首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPanel中JPanel的放置

JPanel中JPanel的放置
EN

Stack Overflow用户
提问于 2014-12-21 21:33:18
回答 2查看 73关注 0票数 0

我正在尝试编写一个简单的Pong,我有一个背景面板,其中包含一个酒吧面板。所以,我当然需要能够将条的大小和垂直移动它的要求。现在我只是试着把它放在一个开始的位置。如果不禁用布局,则无论位置设置如何,栏都会放置在顶部中心,但如果禁用布局并设置位置,它就不会显示。我不确定我错过了什么。下面是一个相关的代码片段:

代码语言:javascript
复制
public PongPanel() {
    setLayout(null);
    setPreferredSize(SIZE);
    setBackground(Color.BLACK);
    player_one_bar = new Bar();
    add(player_one_bar);
    player_one_bar.setLocation(10, getSize().height/2-3);
}
EN

回答 2

Stack Overflow用户

发布于 2014-12-21 21:44:43

如果您将布局管理器设置为null,则必须指定面板的确切坐标,这意味着类似于-

代码语言:javascript
复制
setBounds(10, 10, 20, 100);

将面板放在位置(10,10),宽度为20,高度为100。

票数 3
EN

Stack Overflow用户

发布于 2014-12-21 21:46:42

如果“”指的是乒乓球paddle,那么它根本不应该是一个组件,而应该是一个表示位置的逻辑实体,它由一个在JPanel的paintComponent方法中绘制的精灵可视化地表示。

例如:

代码语言:javascript
复制
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class PongPaddle extends JPanel {
   private static final int PREF_W = 800;
   private static final int PREF_H = 500;
   private static final int RECT_X = 20;
   private static final int RECT_W = 10;
   private static final int RECT_H = 60;
   private static final int STARTING_Y = (PREF_H - RECT_H) / 2;
   private static final int TIMER_DELAY = 15;
   private static final int DELTA_PADDLE = 3;
   private boolean paddle1GoingDown = true;
   private boolean paddle2GoingDown = false;
   private Rectangle paddle1 = new Rectangle(RECT_X, STARTING_Y, RECT_W, RECT_H);
   private Rectangle paddle2 = new Rectangle(PREF_W - RECT_X - RECT_W,
         STARTING_Y, RECT_W, RECT_H);

   public PongPaddle() {
      setBackground(Color.black);
      new Timer(TIMER_DELAY, new TimerListener()).start();
   }

   @Override
   public Dimension getPreferredSize() {
      if (isPreferredSizeSet()) {
         return super.getPreferredSize();
      }
      return new Dimension(PREF_W, PREF_H);
   }

   private class TimerListener implements ActionListener {
      @Override
      public void actionPerformed(ActionEvent e) {
         int deltaPaddle1 = paddle1GoingDown ? 1 : -1;
         deltaPaddle1 *= DELTA_PADDLE;

         int x = paddle1.getLocation().x;
         int y = paddle1.getLocation().y + deltaPaddle1;

         if (y + RECT_H >= PREF_H) {
            paddle1GoingDown = false;
         }
         if (y <= 0) {
            paddle1GoingDown = true;
         }         
         paddle1.setLocation(x, y);

         int deltaPaddle2 = paddle2GoingDown ? 1 : -1;
         deltaPaddle2 *= DELTA_PADDLE;

         x = paddle2.getLocation().x;
         y = paddle2.getLocation().y + deltaPaddle2;

         if (y + RECT_H >= PREF_H) {
            paddle2GoingDown = false;
         }
         if (y <= 0) {
            paddle2GoingDown = true;
         }         
         paddle2.setLocation(x, y);

         repaint();

         if (!PongPaddle.this.isShowing()) {
            ((Timer) e.getSource()).stop();
         }
      }
   }

   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      g2.setColor(Color.white);
      if (paddle1 != null) {
         g2.fill(paddle1);
      }
      if (paddle2 != null) {
         g2.fill(paddle2);
      }
   }

   private static void createAndShowGui() {
      PongPaddle mainPanel = new PongPaddle();

      JFrame frame = new JFrame("PongPaddle");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27589848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档