2013-08-26 71 views
1

我张贴了这个代码前面打印出来,和我有用的答案很多,大部分是我需要彻底改变我的代码。我明白了,明天我会做!但是现在,这是为了消除我为什么不起作用。无法从另一个类文本到另一个(小白)

我试图从客舱类获得sendText,我的消息窗类和输出在messagePane。而已。这似乎很简单,而且可能是......但我已经连续10个小时在这里。我只是希望它将ChatBox中的内容输出到MessageWindow,而不必完全更改我的代码。请帮助:(

public class ChatBox extends JPanel { 

private JScrollPane scrollPane; 
private String sendText; 

public ChatBox() { 
    final JTextArea chatPane = new JTextArea(); 

    scrollPane = new JScrollPane(chatPane, 
      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
      JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    add(scrollPane); 
    scrollPane.setMinimumSize(new Dimension(550, 50)); 
    scrollPane.setPreferredSize(new Dimension(550, 50)); 

    chatPane.addKeyListener(new KeyListener() { 

     @Override 
     public void keyPressed(KeyEvent e) { 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      if(e.getKeyCode() == KeyEvent.VK_ENTER) { 
       sendText = chatPane.getText(); 
       setText(sendText); 
       chatPane.setText(null); 
       // System.out.println(sendText); // I can see this in console 
      } 

     } 

     @Override 
     public void keyTyped(KeyEvent e) { 
     } 

    }); 

} 


public String getText() { 
    return sendText; 
} 


public void setText(String sendText) { 
    this.sendText = sendText; 
} 

}

在我的头上,我设置sendText - >不管我输入然后在消息窗类,我试图用吸气来获取文本和输出。在

public class MessageWindow extends JPanel { 

private ChatBox box = new ChatBox(); 

public MessageWindow() { 
    JTextArea messagePane = new JTextArea(); 

    setLayout(new GridBagLayout()); 

    GridBagConstraints gc = new GridBagConstraints(); 

    gc.weightx = 1; 
    gc.weighty = 1; 
    gc.fill = GridBagConstraints.BOTH; 
    gc.insets = new Insets(5, 5, 5, 5); 
    add(new JScrollPane(messagePane), gc); 

    System.out.println(box.getText()); // Getting null in the console. 
    messagePane.append(box.getText()); // Not getting anything on messagePane. 

} 

}

的messagePane。我知道我需要使用的ActionListeners和一个JTextField,而不是一个JTextArea。我保证我会开始,明天,我将涉农供应链P此整个程序,因为它是,我只需要知道为什么这个基本的东西,失败我:(我知道当我得知getter/setter方法都将成为我完全理解了问题的Java,我想我是对的有关哈哈......

感谢您的帮助!

新规范

public class MessageWindow extends JPanel { 

private ChatBox box = new ChatBox(this); 

public void OnTextSet(String s) { 
    System.out.println(s); 
} 

public MessageWindow() { 
    JTextArea messagePane = new JTextArea(); 

    setLayout(new GridBagLayout()); 

    GridBagConstraints gc = new GridBagConstraints(); 

    gc.weightx = 1; 
    gc.weighty = 1; 
    gc.fill = GridBagConstraints.BOTH; 
    gc.insets = new Insets(5, 5, 5, 5); 
    add(new JScrollPane(messagePane), gc); 

    System.out.println(box.getText()); // Getting null in the console. 
    messagePane.append(box.getText()); // Not getting anything on 
             // messagePane. 

} 

}

而且

public class ChatBox extends JPanel { 

private JScrollPane scrollPane; 
private String sendText = ""; 
private MessageWindow mw; 

public ChatBox() { 
    final JTextArea chatPane = new JTextArea(); 

    scrollPane = new JScrollPane(chatPane, 
      JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
      JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    add(scrollPane); 
    scrollPane.setMinimumSize(new Dimension(550, 50)); 
    scrollPane.setPreferredSize(new Dimension(550, 50)); 

    chatPane.addKeyListener(new KeyListener() { 

     @Override 
     public void keyPressed(KeyEvent e) { 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      if (e.getKeyCode() == KeyEvent.VK_ENTER) { 
       sendText = chatPane.getText(); 
       setText(sendText); 
       chatPane.setText(null); 
       mw.OnTextSet(sendText); 
       // System.out.println(sendText); // I can see this in 
       // console 
      } 

     } 

     @Override 
     public void keyTyped(KeyEvent e) { 
     } 

    }); 

} 

public ChatBox(MessageWindow mw) { 
    this.mw = mw; 
} 


public String getText() { 
    return sendText; 
} 

public void setText(String sendText) { 
    this.sendText = sendText; 
} 

}

回答

0

你需要从ChatboxMessageWindow链接,序发送消息回来,向前。

什么可以做的就是修改如下

private ChatBox box = new ChatBox(this); //is this legal in java? 
            ^^^^ 
public void OnTextSet(String s){ 
    System.out.println(s);  
} 

//elsewhere 
private MessageWindow mw; 
public ChatBox(MessageWindow mw) { 
       ^^^^^^^^^^^^^^^^ 
    this.mw = mw 

... 
public void keyReleased(KeyEvent e) { 
... 
    mw.OnTextSet(sendText); 
} 

现在键入的东西,你应该看到打印出来

+0

我这样放弃了,我甚至不知道我会做什么做的: “然后用这个mw来发送你的字符串。” ...把叉子放在我身上! – Bowhuntr11

+0

当你说//其他地方,你在客舱类作为另一个类的意思吗?或者是什么。那是我感到困惑的地方...... – Bowhuntr11

+0

是的,其他地方是ChatBox类。至于发送它,它就像调用一个接受字符串的函数一样简单。 'mw.sendAString(sendText)' –

0

变量sendText在客舱类不上创建初始化。由于的keyReleased事件还没有被解雇,sendText保持NULL。 尝试从您的代码modifiy在客舱

private String sendText; 

到:

private String sendText = ""; 
+0

谢谢,至少已经清除了null!现在要弄清楚如何让dang sendText到messagePane! :) 再次感谢! – Bowhuntr11

+0

不客气! :) – Davmrtl

+0

@ Bowhuntr11你的问题是计时,你正试图检查设置之前的文本。'null'是一个正确的值:P –