2013-05-09 2 views
1

Это код, который я использую. Я работаю над одноранговым узлом «IM» и . Я хочу знать, как активировать мою кнопку отправки сообщения с помощью клавиши ввода. Я также хочу знать, как я могу объединить две из этих работ и поболтать через Интернет. Если мне нужен сервер посередине, у меня есть один. Peer to peer - лучший вариант, хотя, возможно, hamatchi. Черт, если вы можете помочь двум экземплярам программы на одном компьютере работать вместе, это будет очень полезно. Если понадобится, я сделаю две разные программы.Активировать кнопку в java с помощью клавиши ввода

import java.awt.*; 
import java.awt.event.*; 
import java.util.Date; 

import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.text.BadLocationException; 


public class The_Emissary extends JFrame implements ActionListener { 
    private static final long serialVersionUID = 1L; 

    private JPanel contentPane; 

    /** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       The_Emissary frame = new The_Emissary(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public The_Emissary() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(contentPane); 

    //Panels 

    JPanel panel = new JPanel(); 
    contentPane.add(panel, BorderLayout.CENTER); 
    panel.setLayout(new BorderLayout(0, 0)); 

    JPanel panel_1 = new JPanel(); 
    contentPane.add(panel_1, BorderLayout.SOUTH); 
    panel_1.setLayout(new BorderLayout(0, 0)); 

    final JTextArea textArea = new JTextArea(); 
    textArea.setToolTipText("Messages will pop up here"); 
    textArea.setEditable(false); 
    panel.add(textArea); 
    //Buttons And Text Boxes 
    final TextField textField = new TextField(); 
    panel_1.add(textField, BorderLayout.CENTER); 


    Button SendMSG = new Button("Send Message"); 
    panel_1.add(SendMSG, BorderLayout.EAST); 


    SendMSG.addActionListener(this); 

    SendMSG.addActionListener(new ActionListener() { 
      int A = 0; 

      public void actionPerformed(ActionEvent e) 
      { 
       try { 
        textArea.getDocument().insertString(0, "On " + new Date() + " Anon said: " + textField.getText(), null); 
       } catch (BadLocationException e1) { 
        e1.printStackTrace(); 
       } 
       A++; 
       System.out.println(A); 

      }});  
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     // TODO Auto-generated method stub 

    } 

} 
+0

SO не «один остановить исправить мой код магазина. Ограничьте его одним вопросом на вопрос и рассмотрите аспект P2P по другому вопросу. –

ответ

3

Вы могли бы просто использовать тот же ActionListener вы использовали для кнопки с текстовым полем.

final JTextField textField = new JTextField(); 
panel_1.add(textField, BorderLayout.CENTER); 


JButton SendMSG = new JButton("Send Message"); 
panel_1.add(SendMSG, BorderLayout.EAST); 

ActionListener sendListener = new ActionListener() { 
    int A = 0; 

    public void actionPerformed(ActionEvent e) { 
     textArea.setText("On " + new Date() + " Anon said: " + textField.getText() + "\n" + textArea.getText()); 
     A++; 
     System.out.println(A); 
    } 
}; 
SendMSG.addActionListener(sendListener); 
textField.addActionListener(sendListener); 

Это обеспечивает платформу независимое решение, так как это позволяет текстовое поле, чтобы решить, что на самом деле является «принять» действие для этой платформы.

Код Обзор

Вы смешивания тяжелых компонентов/вес AWT с компонентами света/Swing, это никогда не будет хорошо закончиться.

Придерживайтесь рамках свинг, это более гибкая и более широко используются и поддерживаются

  • Использование JTextField вместо TextField
+0

ПРИЯТНО РАБОТАЕТ! THX MAN! – RexPRGMER

+0

@RexPRGMER: Или вы можете установить указанный JButton в качестве кнопки по умолчанию, используя 'frameObject.getRootPane(). SetDefaultButton (buttonObject)', как указано в этом [ответе] (http: // stackoverflow .com/a/9314931/1057230) :-) –

+0

@nIcEcOw Единственная причина, по которой я не буду использовать этот подход, состоит в том, что текстовое поле, скорее всего, потребляет ключ ввода, поэтому не позволяет 'JRootPane' запускать кнопка по умолчанию ... Случается со мной все время с диалоговыми окнами входа: P – MadProgrammer

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