2014-01-09 78 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

相關問題