2013-05-05 5 views
0

Я создаю приложение Team в java. Я добавляю логотип, который представляет собой комбинацию Rectangle и Circle в JFrame, но после добавления логотипа в приложение JTextArea не показано ... Также добавление нового игрока не показано ...JTextArea not show

Вот мой код.

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.GridLayout; 
import java.awt.Rectangle; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 


public class MainGUI extends JFrame 
{ 
private JLabel teamName; 
private JLabel playerCount; 
private JLabel maxPlayer; 

private JButton createTeam; 
private JButton addOnePlayer; 
private JButton addRemining; 
private JButton exit; 

private Team team; 
private boolean teamCreated; 

private JTextArea text; 
Logo logo; 
public static void main(String[] args) 
{ 

    new MainGUI(); 

} 

public MainGUI() 
{ 
     super.setTitle("Team manager"); 
     super.setSize(500,400); 
     super.setLocation(150,150); 
     super.setLayout(new BorderLayout()); 

     add(addTopPanel(), BorderLayout.NORTH); 
     add(textArea(), BorderLayout.CENTER); 
     add(buttonPanel(), BorderLayout.SOUTH); 
     Logo logo = new Logo(); 
     logo.setBounds(100, 100, 150,150); 
     getContentPane().add(logo); 
     // logo.addSquare(10, 10, 100, 100); 

     super.setVisible(true); 
     super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

} 

private JPanel buttonPanel() 
{ 
    JPanel buttonPanel = new JPanel(); 
    buttonPanel.setLayout(new GridLayout(2,2)); 
    createTeam = new JButton("Create Team"); 
    addOnePlayer = new JButton("Add one player"); 
    addRemining = new JButton("Add remaining players"); 
    exit = new JButton("Exit"); 

    buttonPanel.add(createTeam); 
    buttonPanel.add(addOnePlayer); 
    buttonPanel.add(addRemining); 
    buttonPanel.add(exit); 

    createTeam.addActionListener(new ActionListener() 
    { 
    @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      if(!teamCreated) 
      { 
       teamCreated = true; 
       team = new Team(); 
       teamName.setText("Team name: "+team.getName()); 
       playerCount.setText("Players count: "+team.getCount()); 
       maxPlayer.setText("Max team size: "+team.getSize()); 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(null,"The team has been already created, and no further Team instances are instantiated"); 
      } 

     } 
    }); 

    addOnePlayer.addActionListener(new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      if(team != null) 
      { 
       Player pl = Team.createPlayer(); 
       team.addPlayer(pl); 
       playerCount.setText("Players count: "+team.getCount()); 
       text.setText(team.toString()); 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(null,"Create a team first "); 
      } 
     } 
    }); 

    addRemining.addActionListener(new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      if(team != null) 
      { 
       team.addPlayers(); 
       playerCount.setText("Players count: "+team.getCount()); 
       text.setText(team.toString()); 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(null,"Create a team first "); 
      } 
     } 
    }); 

    exit.addActionListener(new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent e) 
     { 
      System.exit(1); 
     } 
    }); 

    return buttonPanel; 

} 

private JTextArea textArea() 
{ 
    text = new JTextArea(); 

    return text; 
} 

private JPanel addTopPanel() 
{ 
    JPanel top = new JPanel(); 
    top.setLayout(new GridLayout(1,3)); 

    teamName = new JLabel("Team name: "); 
    playerCount = new JLabel("Players count: "); 
    maxPlayer = new JLabel("Max team size: "); 

    top.add(teamName); 
    top.add(playerCount); 
    top.add(maxPlayer); 

    return top; 
} 
class Logo extends JPanel { 
     /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 


      g.setColor(Color.orange); 
      g.drawRect(350,80,70,70); 

      g.setColor(Color.blue); 
      g.drawRoundRect(360, 30, 50, 50, 50, 50);; 
     } 
     } 
} 

ответ

2

после добавить логотип в заявке JTextArea не показан

Причина эта линия:

logo.setBounds(100, 100, 150,150); 
    getContentPane().add(logo); 

setBounds не будет работать с макетами компонентов Swing. Поэтому, когда вы добавляете logo в container из JFrame, он добавляет его в центр, скрывая JTextArea, добавленный в центр.

+0

Если я не добавлю логотип.setBounds(), то логотип не отображается на рамке. – Ahmar

+0

Если вы хотите добавить логотип в верхний левый угол 'JFrame', вы можете использовать что-то подобное в своем конструкторе' MainGUI': 'JPanel nPanel = new JPanel(); nPanel.setLayout (новый BorderLayout()); nPanel .add (logo, BorderLayout.WEST); nPanel.add (addTopPanel()); add (nPanel, BorderLayout.NORTH); ... ' –

+0

Я решаю это, добавляя JTextArea в JPanel и придавая размер этому JPanel, поэтому логотип получить пространство. – Ahmar