2015-07-23 3 views
2

В настоящее время я программирую чат, и каждый раз, когда я пишу что-то в своем поле JText, не отправляя его на сервер, текущее содержимое поля JTextfield сбрасывается на «". В моем коде некоторые строковые части находятся на немецком языке, но это не должно быть большой проблемой, я надеюсь.Java Swing JTextfield сбрасывается каждые 2 секунды

Первый Вот скриншот из пустого JTextField: Тогда я что-то в JTextField написать: enter image description here И после того, что тест текст «.. рт.ст.» будет удален через 2-4 секунд, не нажимая ничего. enter image description here

public class ClientWindow extends JFrame implements Runnable{ 
    private static final long serialVersionUID = 7413464033743652908L; 

    private JPanel contentPane; 

    private JMenuBar bar; 
    private JMenu datei; 
    private JMenu option; 
    private JMenu features; 

    private JMenuItem verlaufSpeichern; 
    private JMenuItem w; 
    private JMenuItem ww; 

    private JTextArea history; 
    private JTextField text; 
    private JButton send; 

    private DefaultCaret caret; 

    private Client client; 

    private Thread run, listen; 

    public ClientWindow(String name, String address, int port){ 
     client = new Client(name,address,port); 

     createWindow(); 
     createPanel(); 
     createLookAndFeel(); 
     createJMenu(); 
     createInhalt(); 
     console("Versuche zu Verbinden.(Username: "+ name +", IP: "+ address +", Port: "+ port +")"); 

     boolean connect = client.openConnection(address); 

     if(!connect){ 
      console("Verbindung fehlgeschlagen."); 
     } 
     String connection = "/c/" + name; 
     client.send(connection.getBytes()); 
     run = new Thread(this,"Running"); 
     run.start(); 
    } 

    public void run(){ 
     listen(); 
    } 

    public void listen(){ 
     listen = new Thread("Listen") { 
      public void run(){ 
       while(true){ 
        String message = client.receive(); 
        if(message.startsWith("/c/")){ 
         client.setID(Integer.parseInt(message.split("/c/|/e/")[1])); 
         console("Erfolgreich verbunden."); 
        } else if(message.startsWith("/m/")){ 
         System.out.println(message); 
         String text = message.substring(3); 
         text = text.split("/e/")[0]; 
         console(text); 
        } else if(message.startsWith("/i/")){ 
         String text = "/i/" + client.getID() + "/e/"; 
         send(text, false); 
        } 
       } 
      } 
     }; 
     listen.start(); 
    } 

    public void createLookAndFeel(){ 
     try { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     } catch (ClassNotFoundException | InstantiationException | IllegalAccessException 
       | UnsupportedLookAndFeelException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void createJMenu(){ 
     bar = new JMenuBar(); 
     datei = new JMenu(" Datei "); 
     option = new JMenu(" Options "); 
     features = new JMenu(" Features "); 
     verlaufSpeichern = new JMenuItem(" Verlauf speichern "); 
     w = new JMenuItem(" Coming Soon "); 
     ww = new JMenuItem(" Coming Soon "); 

     datei.add(verlaufSpeichern); 
     option.add(w); 
     features.add(ww); 

     bar.add(datei); 
     bar.add(option); 
     bar.add(features); 

     setJMenuBar(bar); 
    } 

    public void createWindow(){ 
     setResizable(false); 
     setTitle("Chat - "+ client.getName()); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(800,550); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    public void createPanel(){ 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5,5,5,5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 
    } 

    public void createInhalt(){ 
     history = new JTextArea(); 
     JScrollPane scrollHistory = new JScrollPane(history); 

     scrollHistory.setBounds(10,10,775,450); 
     history.setEditable(false); 
     caret = (DefaultCaret) history.getCaret(); 
     caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
     contentPane.add(scrollHistory); 

     text = new JTextField(); 
     text.setBounds(10, 465, 700, 30); 
     text.addKeyListener(new KeyAdapter(){ 
      public void keyPressed(KeyEvent e){ 
       if(e.getKeyCode() == KeyEvent.VK_ENTER){ 
        send(text.getText(),true); 
       } 
      } 
     }); 
     contentPane.add(text); 

     send = new JButton("Senden"); 
     send.setBounds(715, 465, 70, 30); 
     send.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e) { 
       send(text.getText(),true); 
      } 
     }); 
     contentPane.add(send); 

     addWindowListener(new WindowAdapter(){ 
      public void windowClosing(WindowEvent e){ 
       String disconnect = "/d/"+ client.getID()+"/e/"; 
       send(disconnect,false); 
       client.close(); 
      } 
     }); 

     text.requestFocusInWindow(); 
    } 

    public void send(String message, boolean textB){ 
     if(message.equals("")) return; 
     if(textB){ 
      message = client.getName() + ": " + message; 
      message = "/m/"+message; 
     } 
     client.send(message.getBytes()); 
     text.setText(""); 
     text.requestFocusInWindow(); 
    } 

    public void console(String message){ 
     history.append(message + "\n\r"); 
     history.setCaretPosition(history.getDocument().getLength()); 
    } 
} 
+0

'contentPane.setLayout (null);' Java GUIs должны работать с разными ОС, размером экрана, разрешением экрана и т. Д., Используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

ответ

2

В методе отправки вы текст установлен в положение "" в этой строке:

text.setText(""); 

Вот метод, который я упомянул:

public void send(String message, boolean textB){ 
if(message.equals("")) return; 
if(textB){ 
    message = client.getName() + ": " + message; 
    message = "/m/"+message; 
} 
client.send(message.getBytes()); 
text.setText(""); 
text.requestFocusInWindow(); 

} `

Я думаю, что если вы удалите эту строку, текст не будет сброшен, и это будет плохо решите свою проблему.

+0

Теперь я вижу свое плохое. Благодаря! – MarvinJoke

+0

Добро пожаловать @MarvinJoke !! :) Если вы отметите ответ как правильный? – juanmajmjr