2014-01-09 39 views
1

对于这个程序,JButton似乎不会出现,除非你点击JButton应该在的区域; JFrame开始空白。当你点击按钮时,相应的代码会运行,按钮最终显示出来。JButton不会出现,直到点击

如何在启动程序时显示按钮?

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 
/* 
The Amazing BlackJack Advisory Tool by JoshK,HieuV, and AlvinC. 
Prepare to be amazed :O 
*/ 
public class BlckJackUI { 
    //main class, will contain the JFrame of the program, as well as all the buttons. 
    public static void main(String args[]) 
    { 
    //Creating the JFrame 
    JFrame GUI = new JFrame("Blackjack Advisor"); 
    GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    GUI.setSize(1300, 900); 
    GUI.setContentPane(new JLabel(new ImageIcon("C:\\Users\\Hieu Vo\\Desktop\\Green Background.png"))); 
    GUI.setVisible(true); 
    // Because each button needs to run through the Math class. 
    final Math math = new Math(); 
    // The Ace Button: 
    ImageIcon Ace = new ImageIcon("/Users/computerscience2/Downloads/Ace.jpg"); 
    JButton ace = new JButton(Ace); 
    ace.setSize(300, 100); 
    ace.setLocation(100, 100); 
    ace.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      //Automatically default the the Ace to 11, and if Bust, Ace becomes 1. 
      if (math.array.playerhandtotal <= 21) 
      { 
       math.cardvalue = math.cardvalue + 11; 
      } 
      else 
      { 
       math.cardvalue = math.cardvalue + 1; 
      } 
      math.array.clicktracker++; 
      math.calcResult(); 
      JOptionPane.showMessageDialog(null,math.array.result); 
     } 
    }); 
    GUI.add(ace); 
    ImageIcon Two = new ImageIcon("/Users/computerscience2/Downloads/2.jpg"); 
    JButton two = new JButton(Two); 
    two.setSize(300, 100); 
    two.setLocation(100, 200); 
    two.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      /* 
       This generally repeats throughout the whole class, and the only 
       thing different is the changing cardvalue. When a button is pressed, 
       respective cardvalues are added into the playerhand ArrayList, and 
       totaled up to form playerhandtotal, which is a major factor in 
       bringing up the advice. 
      */ 
      math.cardvalue = math.cardvalue + 2; 
      math.array.clicktracker++; 
      math.calcResult(); 
      JOptionPane.showMessageDialog(null,math.array.result); 
     } 
    }); 
    GUI.add(two); 

等等,等等......只是一堆同样的东西,更多的按钮编码为JButton的两个完全相同的方式,但与之关联的不同值。

JButton start = new JButton("Start/Reset"); 
    start.setSize(300, 100); 
    start.setLocation(500,500); 
    start.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      /* 
      The start button also acts like a reset button, and the concept is fairly 
      simple. If we reset all the important values to 0 or "null," then the 
      program acts as if it was just opened. 
      */ 
      Arrays array = new Arrays(); 
      array.playerhand.clear(); 
      array.dealer = 0; 
      math.array.starttracker++; 
      math.array.clicktracker = 0; 
      array.playerhandtotal = 0; 
      math.cardvalue = 0; 
      array.result = null; 
      JOptionPane.showMessageDialog(null,"Please select the card \nthat the dealer is showing :)"); 

     } 
    }); 
    GUI.add(start); 
    GUI.setLayout(null); 

这一切都是在同一个班级,我理解的布局将是更好的,但也许有一种方法,使用的是什么我现在要解决这个问题?任何想法,不胜感激。

回答

3

程序从空白处开始,因为您在添加组件之前调用了setVisible。在添加组件后(在构造器的末尾)调用setVisible,它应该可以正常工作。 另外,避免组件的绝对定位和调用set | Preferred | Minimum | MaximumSize方法。了解如何使用布局管理器。

+0

你应该说在构造函数的末尾,而不是代码的末尾,你可能会混淆OP。 +1 btw –

+0

@peeskillet更正。但就像通知一样,他不必在构造函数的末尾调用'setVisible'。 :) –

+0

谢谢你们,哈哈。应该已经知道了我自己。我知道我应该学习如何使用布局管理器,但还没有到达那里。谢谢你的一切。 – user3009776

相关问题