2014-04-06 60 views
0

人。最近我开始研究一些简单的游戏来提高我的挥杆知识。我需要为我的一个项目使用JButtons,所以我做到了。 这是问题 ...Java JButton大小问题

当我打开窗口,而不是看到加载图像的正常屏幕,整个屏幕只是我添加到框架的最后一个按钮。我尝试使用setSize()功能,但按钮仍然超大,并填满了屏幕。

代码:

import javax.swing.JPanel; 
import javax.swing.BorderFactory; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.SwingUtilities; 
import javax.swing.JFrame; 
import java.awt.Image; 
import java.io.*; 
import java.net.URL; 
import javax.imageio.*; 
import java.awt.image.*; 
import java.awt.Font; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class engine { 
    public static int chips = 5000; 
    public static String c = chips+""; 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       GUI(); 
       } 
      }); 
    } 

    private static void GUI() { 
     JFrame f = new JFrame("Pinnacle Baccarat"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setPreferredSize(new Dimension(768, 512)); 
    f.add(new p()); 
    engine e2 = new engine(); 
    JButton bet1 = new JButton("Bet 1 chip"); 
    JButton bet2 = new JButton("Bet 10 chips"); 
    JButton bet3 = new JButton("Bet 100 chips"); 
    JButton bet4 = new JButton("Bet 1k chips"); 
    JButton bet5 = new JButton("Bet 10k chips"); 
    JButton bet6 = new JButton("Bet 100k chips"); 
    if(e2.chips < 1){bet1.setEnabled(false);} 
    if(e2.chips > 0){bet1.setEnabled(true);} 
    if(e2.chips < 10){bet2.setEnabled(false);} 
    if(e2.chips > 9){bet2.setEnabled(true);}  
    if(e2.chips < 100){bet3.setEnabled(false);} 
    if(e2.chips > 99){bet3.setEnabled(true);} 
    if(e2.chips < 1000){bet4.setEnabled(false);} 
    if(e2.chips > 999){bet4.setEnabled(true);} 
    if(e2.chips < 10000){bet5.setEnabled(false);} 
    if(e2.chips > 9999){bet5.setEnabled(true);} 
    if(e2.chips < 100000){bet6.setEnabled(false);} 
    if(e2.chips > 99999){bet6.setEnabled(true);} 
    bet1.setPreferredSize(new Dimension(96, 32)); 
    bet2.setPreferredSize(new Dimension(96, 32)); 
    bet3.setPreferredSize(new Dimension(96, 32)); 
    bet4.setPreferredSize(new Dimension(96, 32)); 
    bet5.setPreferredSize(new Dimension(96, 32)); 
    bet6.setPreferredSize(new Dimension(96, 32));    
    f.add(bet1); 
    f.add(bet2); 
    f.add(bet3); 
    f.add(bet4); 
    f.add(bet5); 
    f.add(bet6); 
    f.pack(); 
     f.setVisible(true); 

    } 
} 
class p extends JPanel { 
    public p() { 
    } 
    public void paintComponent(Graphics g) { 
    engine eng = new engine(); 
     super.paintComponent(g);  
     BufferedImage chip = null; 
    BufferedImage table = null; 
    try { 
      table = ImageIO.read(new File("bg.png")); 
    } catch (IOException e) { 
    } 
    try { 
      chip = ImageIO.read(new File("chip.png")); 
    } catch (IOException e) { 
    } 
    g.drawImage(table, 0, 0, null); 
    g.drawImage(chip, 4, 446, null); 
    g.setColor(new Color(255, 0, 0)); 
    g.setFont(new Font("default", Font.BOLD, 20)); 
    g.drawString(eng.c, 36, 467); 
    } 
} 

任何人可以帮助? 编辑:我也需要知道如何将按钮专门放置在地方。 编辑2:使用f.setLayout(null)后,按钮工作,但我的绘画方法和图片被打破:他们不显示。谁能帮忙?

回答

0

它,因为你没有指定布局管理器补充一点:

f.setLayout(new FlowLayout()); 

更要学会如何设置的东西定位阅读布局管理器或使用setLayout(null)您的面板,然后使用setBounds()方法设置元素的X和Y位置。

+0

当我用'f.setLayout(新的FlowLayout());'它最终没有跟随我的界限,并从绘画方法去除照片。但是,当我删除它时,它工作正常,除了最后一个仍然覆盖屏幕,并且除最后一个外,所有按钮都显示正确。 我该如何解决这个问题? –

+0

如果你想使用边界,那么你使用'f.setLayout(null);' – smistry

+0

这是有效的,但我的绘画方法不再工作了! –

1

JFrame的默认布局管理器是BorderLayout。这只允许一个组件在五个位置中的任何一个。通过添加没有限制的按钮,它们被添加到中心位置,每个按钮都替换之前的按钮。

检查Visual Guide to Layouts了解更多信息。

编辑添加一些信息: 也忘记setXxxSize()方法,并尝试手动放置组件。布局经理会忽略您设置的尺寸,并将尺寸和放置您的组件。了解不同的布局管理器并使用它们的组合来实现您想要的布局。