2014-01-09 3 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 после добавления компонентов (в конце contructor), и он должен работать нормально. Кроме того, избегайте абсолютного позиционирования и вызова набора | Предпочтительные | Минимальные | Максимальные значения для ваших компонентов. Узнайте, как использовать менеджеры макетов.

+0

Вы должны сказать в конце конструктора, а не в конце кода, вы можете смутить OP. +1 btw –

+0

@peeskillet Исправлено. Но так же, как уведомление, ему не нужно называть 'setVisible' в конце конструктора. :) –

+0

Спасибо, ребята, ха-ха. Должен был подумать об этом. Я понимаю, что я должен научиться использовать менеджеры макетов, но еще не добрался. Спасибо за все. – user3009776

Смежные вопросы