-1

ここに私の問題があります:トラフィックは、シリアルポートからのテキストを挿入するJTextAreaであり、DocumentListenerを実装しました:

Java コード:

 Traffic.getDocument (). AddDocumentListener (new MyDocumentListener ());

JTextAreaの「トラフィック」は、私が望むものを示し、プログラムは問題なく実行されます。今私がしたいのは、挿入されたもの(挿入イベントでのみ)を行ごとに処理することです(それがテストの目的です)。例を挙げます。

==> 「ON-HOOK」を受信した場合、オンフックの電話の JPanel に画像を入れます 「OFF-HOOK」を受信した場合、電話のオフフックの JPanel に画像を入れると、リストは ...

それを行う方法、必要なときにペイントコンポーネントを呼び出して、ペイントコンポーネントでグラフィック操作しかできないため、必要なものを描画する方法を理解していませんでした()。これは DocumentListener のクラスです。

  protected class MyDocumentListener  extends JPanel implements javax.swing.event.DocumentListener
{
 @Override
   public void changedUpdate(javax.swing.event.DocumentEvent e) {
     // text has been altered in the textarea

     }

 @Override
  public void insertUpdate(javax.swing.event.DocumentEvent e) 
  {
         // text has been added to the textarea 
     try { 

         if  (!Traffic.getText(Traffic.getLineStartOffset(Traffic.getLineCount()-1),Traffic.getLineEndOffset(Traffic.getLineCount()-1)-Traffic.getLineStartOffset(Traffic.getLineCount()-1)).contains(">>"))
         {

           if (Traffic.getLineCount()  == (lastreplace + 2) ) 
           {
               System.err.println(Traffic.getText(Traffic.getLineStartOffset(lastreplace),Traffic.getLineEndOffset(lastreplace) - Traffic.getLineStartOffset(lastreplace)));
            lastreplace +=1;

            }


          else
          {
            System.err.println(Traffic.getText(Traffic.getLineStartOffset(lastreplace),
                         Traffic.getLineEndOffset(lastreplace) - 
                                 Traffic.getLineStartOffset(lastreplace)));
          }
       }
        Traffic.setCaretPosition(Traffic.getDocument().getLength());

     } catch (BadLocationException ex) {
         Logger.getLogger(TrafficSerialPort.class.getName()).log(Level.SEVERE, null, ex);
     }

 }

 @Override
 public void removeUpdate(javax.swing.event.DocumentEvent e) {
   // text has been removed from the textarea

 }

}

"PortArchitecture (..)"will draw what I want と呼ばれるメソッドを使用しようとしましたが、使用しgetGraphics()ないでくださいと言われたので、paintComponent()本当に困っています助けてください。

4

1 に答える 1

1

まず第一に、ドキュメント リスナーではそれを行いません。シリアルポートから行が読み取られたときに JTextAea を更新するメソッドが既にあります。この同じ方法で表示される画像を変更します。

private void lineReceivedFromSerialPort(String line) {
    traffic.append(line);
    updateImage(line);
}

そして、イメージを変えるために、私はまったく使いませんpaintComponent()。パネルのどこかに JLabel を配置するだけで、行が受信されたら、適切な画像アイコンをロードしてラベルに設定します。

private void updatImage(String line) {
    ImageIcon iconToDisplay = null;
    if (line.equals("ON-HOOK")) {
        iconToDisplay = phoneOnIcon;
    }
    else if (line.equals("OF-HOOK")) {
        iconToDisplay = phoneOffIcon;
    }
    ...
    imageLabel.setIcon(iconToDisplay);
}
于 2013-01-22T11:29:35.720 に答える