Прошу прощения, если моя терминология или фразы неверны, я новичок в качелях. Кроме того, извиниться за неуклюжий и разумный способ, я пытался заставить это работать.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.
Почему вы '' GameGUI' простирающуюся JFrame', если вы создаете локальную 'JFrame' в конструкторе? – flakes
@flkes извините, я не понял, как это работает, и просто смял разные примеры вместе. Спасибо, я исправлю это сейчас. – Elise