2013-05-09 188 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