2011-05-07 64 views
15

我正在开发使用Java的Snake游戏。董事会的(所有行动取其位置)宽度和高度应该是固定的(640像素* 480像素)。如何设置JPanel的宽度和高度?

结构:

  • Main类的JFrame类扩展,
  • 董事会类从扩展JPanel类;

主要类我有类似...

setSize(1024, 768); 

...在董事会类我有...

setSize(BOARDS_WIDTH, BOARDS_HEIGHT); 

问题是主要的,只有窗口似乎是1024 * 768,但面板里面 - 不像640 * 480。我有setBackground()以及背景填充超过640 * 480。

有什么办法让主板的宽度和高度像640 * 480,但主窗口的宽度和高度 - 和主板的宽度和高度一样正确吗?

现在它看起来像这样...

Width and height are ~1000 * ~750, not 640 * 480.

编辑:

所有作品......几乎。

主要类:

add(new Board(), BorderLayout.CENTER); 
pack(); 
setResizable(false); 
setLocationRelativeTo(null); 
setVisible(true); 
setDefaultCloseOperation(EXIT_ON_CLOSE); 
setTitle("Snake (by daGrevis)"); 

董事会类:

setPreferredSize(new Dimension(640, 480)); 

灰色背景是642 * 482!就像将有1个像素的边界一样!

+0

通常不需要扩展组件,除非增加额外的功能(例如新方法)。 – 2011-05-07 13:11:52

+0

会记住我的想法。我只是Java的新手! – daGrevis 2011-05-07 13:16:55

+2

为了获得超出已经提供的帮助(由我认为是'Swing的大师'之一的人),我建议你发布一个[SSCCE](http://pscode.org/sscce.html)。 – 2011-05-07 13:36:48

回答

9

请,出了X X X * X,这是不是真的,检查

JButton Size - java.awt.Dimension[width=400,height=40] 
JPanel Size - java.awt.Dimension[width=640,height=480] 
JFrame Size - java.awt.Dimension[width=646,height=505] 

码(从Trail: Creating a GUI With JFC/Swing基本的东西,但我还是满意的,这将过时)

编辑:忘记setDefaultCloseOperation()

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class FrameSize { 

    private JFrame frm = new JFrame(); 
    private JPanel pnl = new JPanel(); 
    private JButton btn = new JButton("Get ScreenSize for JComponents"); 

    public FrameSize() { 
     btn.setPreferredSize(new Dimension(400, 40)); 
     btn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.out.println("JButton Size - " + btn.getSize()); 
       System.out.println("JPanel Size - " + pnl.getSize()); 
       System.out.println("JFrame Size - " + frm.getSize()); 
      } 
     }); 
     pnl.setPreferredSize(new Dimension(640, 480)); 
     pnl.add(btn, BorderLayout.SOUTH); 
     frm.add(pnl, BorderLayout.CENTER); 
     frm.setLocation(150, 100); 
     frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // EDIT 
     frm.setResizable(false); 
     frm.pack(); 
     frm.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       FrameSize fS = new FrameSize(); 
      } 
     }); 
    } 
} 
+0

-1 for setXXSize – kleopatra 2011-05-08 11:27:40

+0

“大问题”是我需要在add()之前调用setResizable(false)false! – daGrevis 2011-05-08 14:09:59

6
Board.setPreferredSize(new Dimension(x, y)); 
. 
. 
//Main.add(Board, BorderLayout.CENTER); 
Main.add(Board, BorderLayout.CENTER); 
Main.setLocations(x, y); 
Main.pack(); 
Main.setVisible(true); 
+2

是的,+1,但我没有使用setLocations - 也许这是一个错字。我在调用pack之后调用setLocationRelativeTo(null)来居中GUI。 – 2011-05-07 13:04:24

+0

谢谢,为我工作。只是'Borderlayout'应该是'BorderLayout'。 – daGrevis 2011-05-07 13:06:44

+1

@ daGrevis,谢谢那是我内置的头Java .... – mKorbel 2011-05-07 13:19:12

相关问题