2013-05-09 59 views
1

這是我正在使用的代碼。 我正致力於點對點「IM」和 我想知道如何使用回車鍵激活我的發送消息按鈕。我也想知道如何讓這兩個工作在一起並通過互聯網聊天。如果我需要中間的服務器,我有一個。儘管點對點是最好的選擇,也許是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方面。 – 2013-05-09 00:21:52

回答

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 2013-05-09 00:27:06

+0

@RexPRGMER:或者您可以通過使用'frameObject.getRootPane()。setDefaultButton(buttonObject)'來設置所述的'JButton',作爲默認的Button,如[answer](http:// stackoverflow .com/a/9314931/1057230):-) – 2013-05-09 04:11:34

+0

@nIcEcOw我不會使用這種方法的唯一原因是文本字段可能會消耗回車鍵,因此不允許'JRootPane'有機會觸發默認按鈕...隨時登錄對話框發生在我身上:P – MadProgrammer 2013-05-09 04:14:39