roomframe.java

来自「java版ace,java程序员值得一看」· Java 代码 · 共 298 行

JAVA
298
字号
/*   $RCSfile: RoomFrame.java,v $   $Author: sumedh $   Last Update: $Date: 1997/01/31 01:11:02 $   $Revision: 1.1 $   REVISION HISTORY:   $Log: RoomFrame.java,v $   Revision 1.1  1997/01/31 01:11:02  sumedh   Added the Nexus II source code files.# Revision 1.2  1996/12/07  06:25:18  rajeev# backup## Revision 1.1  1996/12/07  06:15:12  rajeev# Initial revision#*/import java.awt.*;import awtCommand.*;import java.util.* ;//import NexusII.client.* ;//import NexusII.util.* ;//import NexusII.networking.*;class RoomFrame extends CFrame implements consts {  private static String rcsId = new String("$Id: RoomFrame.java,v 1.1 1997/01/31 01:11:02 sumedh Exp $");  // Graphics Objects  private CTextField tfInput ;   private CTextArea taOutput ;  private CButton bLeave ;  private ImageCanvas icOutput;  private Font normalFont = new Font("Helvetica", Font.PLAIN, 14);  private Font boldFont = new Font("Helvetica", Font.BOLD, 14);  private Font italicFont = new Font("Helvetica", Font.ITALIC, 14);  private static final int LINE_LENGTH = 70;  // Other required objects  private MT_Bounded_Queue write_q_ ;   private NexusClientApplet applet_ ;   private String myName_ ;   public RoomFrame(MT_Bounded_Queue write_q,		   NexusClientApplet applet,		   String name) {    super(name);    write_q_ = write_q ;     applet_  = applet ;     myName_  = name ;     SetUpGraphics();    this.pack();    this.show();  }  void SetUpGraphics() {    // Initialize the graphics objects    // The input text line    tfInput = new CTextField(LINE_LENGTH);    textHandler handlerT = new textHandler(write_q_,applet_,myName_);    tfInput.setActionCommand(handlerT);    // The leave button    bLeave = new CButton(LEAVE_STR);    bLeave.setActionCommand(applet_.nexusJoiner);	    icOutput = new ImageCanvas(myName_);    taOutput = new CTextArea(10,LINE_LENGTH);    GridBagLayout gbl = new GridBagLayout();    GridBagConstraints gbc = new GridBagConstraints();    setFont(normalFont);    setLayout (gbl);    gbc.insets = new Insets(5,5,5,5);    gbc.ipadx  = 5;    gbc.ipady  = 5;    gbc.weightx = 1.0;    gbc.weighty = 1.0;    // First the Image so that sizes are fixed    gbc.gridx = 1;    gbc.gridy = 0;    gbc.anchor = GridBagConstraints.CENTER;    gbc.fill = GridBagConstraints.BOTH;    gbl.setConstraints(icOutput, gbc);    add(icOutput);    // The Text Output Area    gbc.gridx = 0;    gbc.gridy = 0;    gbc.weighty = 0.0;    gbc.anchor = GridBagConstraints.SOUTH;    gbc.fill = GridBagConstraints.BOTH;    gbl.setConstraints(taOutput,gbc);    taOutput.setEditable(false);    add(taOutput);    // The Text Input Field    gbc.gridx = 0;    gbc.gridy = 1;    gbc.weighty = 0.0;    gbc.anchor = GridBagConstraints.NORTH;    gbc.fill = GridBagConstraints.HORIZONTAL;    gbl.setConstraints(tfInput,gbc);    add(tfInput);    // The Leave Button    gbc.gridx = 1;    gbc.gridy = 1;    gbc.anchor = GridBagConstraints.NORTH;    gbc.fill = GridBagConstraints.HORIZONTAL;    gbl.setConstraints(bLeave,gbc);    add(bLeave);    resize(800,280);    setResizable(true);	// Allow the user to resize    validate();  }  public boolean handleEvent(Event event) {    if (event.id == Event.WINDOW_DESTROY)      dispose();    return super.handleEvent(event);  }  // This function will be called by the RoomHandler when it receives  // anything for this room and will add the data   public  void addText(String tobeadded) {    if (false) {      String speaker = null;      String msg = null;      int pos = tobeadded.indexOf(':');      if (pos >= 0)        speaker = tobeadded.substring(0,pos+1);      else        speaker = new String("");      msg = tobeadded.substring(pos+1);      Font oldf = taOutput.getFont();      taOutput.setFont(boldFont);      taOutput.appendText(speaker);      taOutput.setFont(italicFont);      taOutput.appendText(msg+"\n");      taOutput.setFont(oldf);    }    else {      taOutput.appendText(tobeadded+"\n");    }    return;  }  // This function will also be called by the RoomHandler whenit receives  // Image data for this room.   public void 	updateImage(Image im) {     if(DEBUG) {       System.out.println("Room : I got an image");    }    icOutput.setImage(im);  }     }/** * The ImageCanvas Class -- for the image in the class */class ImageCanvas extends Canvas implements consts {  Image image_ = null;  int defWidth_ = 128;  int defHeight_ = 128;  int margin = 5;  String name_ = new String("Nexus Room");  Font nameFont = new Font("Helvetica",0,14);  public ImageCanvas(String s)   {    name_ = s;  }  public Dimension preferredSize() {    return minimumSize();  }  public Dimension minimumSize() {    return new Dimension(defWidth_, defHeight_);  }  public void setImage(Image newIm) {    image_ = newIm;    repaint();  }  public Image getImage() {    return image_;  }  public void name(String n) {    name_ = n;  }  public String name() {    return name_;  }  public void paint(Graphics g) {    Dimension d = size();    int width = d.width;    int height = d.height;    if (DEBUG)      System.out.println("ImageCanvas:: width = "+width+ " height="+height);    g.setColor(Color.black);    g.fillRect(0,0,width-1,height-1);    g.setColor(Color.white);    g.fillRect(margin,margin,width-2*margin,height-2*margin);    // Create image if reqd    if (image_ == null)      image_ = createImage(width-2*margin,height-2*margin);    g.drawImage(image_, margin, margin,		width-2*margin, height-2*margin, Color.white, this);    g.setColor(Color.blue);    g.setFont(nameFont);    FontMetrics fm = g.getFontMetrics();    g.drawString(name_,(width - fm.stringWidth(name_))/2,		 (int)(height*0.9 - fm.getMaxDescent()));    validate();    return;  }  public void update(Graphics g) {    paint(g);  }} // End of the Image Canvas Class// this is the event handler for the textfield -- whenever anything is typed class textHandler implements Command,consts,Runnable {   private MT_Bounded_Queue write_q_ ;   private NexusClientApplet applet_ ;   private String name_ ;   Object what_ ;   public textHandler(MT_Bounded_Queue write_q,		     NexusClientApplet applet,		     String name) {     write_q_ = write_q ;    applet_   = applet ;     name_ = name ;   }  public void execute(Object target, Event evt, Object what) {     // get the string and send it across in a different thread     what_ = what ;     // clear the field in the gui     ((TextField)target).setText("");    // send it off     new Thread(this).start();   }  // send off the string in a different thread   public void run() {    String data = (String)what_;     // check if data begins with / and is followed by url     if(!data.startsWith("/url")) {             String user = NexusClientApplet.myName ;      String command = user + ":" + data ;       String len = Integer.toString(command.length());      dataPacket packet  = new dataPacket(NexusClientApplet.myName,name_,					  "TEXT",len,command);      write_q_.nq(packet);    }    else {       // it is /url       StringTokenizer t  = new StringTokenizer(data);       // take out the /url from here       String ur = t.nextToken();       // data now       String command = t.nextToken();       String len = Integer.toString(command.length());      dataPacket packet  = new dataPacket(NexusClientApplet.myName,name_,					  "URL",len,command);      write_q_.nq(packet);    }  }} // end of class   		

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?