2016-03-23 2 views
0

Прошу прощения, если моя терминология или фразы неверны, я новичок в качелях. Кроме того, извиниться за неуклюжий и разумный способ, я пытался заставить это работать.swing - почему это создает две отдельные коробки

Я пытаюсь создать единое окно с JTextArea внутри него, а затем эта область (все еще в том же поле) имеет несколько кнопок. Тем не менее, все, что мне удалось сделать, это сделать коробку с кнопками и отдельный блок с текстовой областью.

Я рассмотрел множество примеров, когда люди пытаются делать подобные вещи, и я думал, что мне удалось понять и реализовать его, но я еще не успел. Если кто-то может указать мне на часть (-ы) кода, я не понимаю, я был бы очень благодарен.

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

import javax.swing.JFrame;                                 
import javax.swing.*;                                   

public class GameGUI extends JFrame implements ActionListener                         
{                                        
    private static final long serialVersionUID = 1L;                           
    JPanel panel = new JPanel();                                
    JTextArea textArea = new JTextArea(50, 50);                            
    JScrollPane scrollPane = new JScrollPane(textArea);                          
    String action;                                   
    private static GUIClient client = new GUIClient();                          

    JButton n = new JButton("N");                                
    JButton e = new JButton("E");                                
    JButton s = new JButton("S");                                
    JButton w = new JButton("W");                                
    JButton look = new JButton("LOOK");                              
    JButton pickup = new JButton("PICKUP");                             
    JButton hello = new JButton("HELLO");                              
    JButton quit = new JButton("QUIT");                              



    public GameGUI()                                   
    {                                       
     textArea.setEditable(false);                                                          
     panel.add(new JScrollPane(textArea));                             
     this.setBounds(300, 300, 750, 500);           
     this.setVisible(true);                                
     this.setResizable(false);                                
     this.setLayout(null);                                 

     n.setBounds(225, 25, 50, 50);                               
     e.setBounds(300, 100, 50, 50);                              
     s.setBounds(225, 175, 50, 50);                              
     w.setBounds(150, 100, 50, 50);                              
     look.setBounds(50, 362, 100, 50);                              
     pickup.setBounds(200, 362, 100, 50); 
     hello.setBounds(350, 362, 100, 50);                             
     quit.setBounds(500, 362, 100, 50);                             

     this.add(n);                                   
     this.add(e);                                   
     this.add(s);                                   
     this.add(w);                                   
     this.add(look);                                  
     this.add(pickup);                                  
     this.add(hello);                                  
     this.add(quit);                                  

     n.addActionListener(this);                               
     e.addActionListener(this);                               
     s.addActionListener(this);                               
     w.addActionListener(this);                               
     look.addActionListener(this);                               
     pickup.addActionListener(this);                              
     hello.addActionListener(this);                              
     quit.addActionListener(this);                               

     this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);                        
     this.pack();                                    
     this.setVisible(true);                                 
    }                                       

    public void displayInGUI(String fromServer)                            
    {                                       
     textArea.append(fromServer);                               
     textArea.setCaretPosition(textArea.getDocument().getLength());                      
    }                                       

    public void actionPerformed(ActionEvent f)                            
    {                                       
     if(f.getSource()==n)                                 
     {                                      
      action = "MOVE N";                                
      client.display(action);                               
     }                                      
     else if(f.getSource()==e)                                
     {                                      
      action = "MOVE E";                                
      client.display(action);                               
     } 
     else if(f.getSource()==s)                                
     {                                      
      action = "MOVE S";                                
      client.display(action);                               
     }                                      
     else if(f.getSource()==w)                                
     {                                      
      action = "MOVE W";                                
      client.display(action);                               
     }                                      
     else if(f.getSource()==look)                               
     {                                      
      action = "LOOK";                                 
      client.display(action);                               
     }                                      
     else if(f.getSource()==pickup)                              
     {                                      
      action = "PICKUP";                                
      client.display(action);                               
     }                                      
     else if(f.getSource()==hello)                               
     {                                      
      action = "HELLO";                                 
      client.display(action);                               
     }                                      
     else if(f.getSource()==quit)                               
     {                                      
      action = "QUIT";                                 
      client.display(action);                               
     }                                      

    }                                       

} 

Я использовал этот класс, создавая экземпляр этого в GUIClient (я также создал экземпляр GUIClient в этом классе, GameGUI, который, кажется, действительно некрасиво, но это был единственный способ, которым я мог думать чтобы заметить, когда были нажаты кнопки).

Итак, если я хочу запустить игру, я настроил сервер, а затем запустил GUIClient, который создает два поля. Затем GUIGame замечает, когда кнопки нажимаются, и отправляет эту информацию клиенту, который отправляет его на сервер.

Опять же, мне жаль, что это так запутано. Надеюсь, мое объяснение помогло мне разобраться, но если не просто сообщите мне.

Большое спасибо, Elise.

+1

Почему вы '' GameGUI' простирающуюся JFrame', если вы создаете локальную 'JFrame' в конструкторе? – flakes

+1

@flkes извините, я не понял, как это работает, и просто смял разные примеры вместе. Спасибо, я исправлю это сейчас. – Elise

ответ

2

Я добавил метод 'main()' (и закомментировал части клиента), чтобы я мог запускать вашу программу. Я также установил размер кадра 800x500, чтобы он был виден. Это то, что я вижу:

Screenshot: original

Причина текстовая область не видна это вы не добавить его к раме. Вам нужно будет добавить панель, содержащую scrollpane, которая содержит текстовое поле к фрейму. Вам также нужно будет поместить и изменить размер. Например:

panel.setBounds(400, 25, 200, 200); 
this.add(panel); 

Это производит следующее:

Screenshot: update