2011-05-07 95 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

相關問題