Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Исходный текст программы CustomCheckBox.java

Оглавление

Назад

// ==========================================
// CustomCheckBox.java
//(C) Alexandr Frolov, 1998
// E-mail: frolov@glasnet.ru
// Web:    http://www.glasnet.ru/~frolov 
// ==========================================

import java.applet.Applet;
import java.awt.*;

// ===========================================
// Class CustomCheckBox
// ===========================================
public class CustomCheckBox extends Applet
{
  cCheckbox cchkRed;
  cCheckbox cchkBold;
  cCheckbox cchkItalic;
  
  Image imgChecked;
  Image imgUnchecked;
  
  Color clrText = Color.black;
  int nFontStyle = Font.PLAIN;

  // ===========================================
  // init
  // ===========================================
  public void init()
  {
    setBackground(Color.yellow);
    setForeground(Color.black);
    
    imgChecked = 
      getImage(getCodeBase(), "checked.gif");
      
    imgUnchecked = 
      getImage(getCodeBase(), "unchecked.gif");
    
    cchkRed =  new cCheckbox(this, 
      imgChecked, imgUnchecked, 
      "Red", 80, 20);
      
    cchkBold =  new cCheckbox(this, 
      imgChecked, imgUnchecked, 
      "Bold", 80, 20);
      
    cchkItalic =  new cCheckbox(this, 
      imgChecked, imgUnchecked, 
      "Italic", 80, 20);
      
    add(cchkRed);
    add(cchkBold);
    add(cchkItalic);
  }
  
  // ============================================
  // paint
  // ============================================
  public void paint(Graphics g)
  {
    g.setColor(clrText);
    g.setFont(
      new Font("Helvetica", nFontStyle, 24));
      
    g.drawString("Test string", 10, 60);
  }
  
  // ===========================================
  // getAppletInfo
  // ===========================================
  public String getAppletInfo()
  {
    return "Name: CustomCheckBox";
  }
  
  // ===========================================
  // action
  // ===========================================
  public boolean action(Event evt, Object obj)
  {
    cCheckbox cch;
    
    if(evt.target instanceof cCheckbox)
    {
      cch = (cCheckbox)evt.target;
      if(cch.equals(cchkRed))
      {
	if(cch.getState())
	  clrText = Color.red;
	else
	  clrText = Color.black;
      }
      
      else if(cch.equals(cchkItalic))
      {
	if(cch.getState())
	  nFontStyle |= Font.ITALIC;
	else
	  nFontStyle &= ~Font.ITALIC;
      }
           
      else if(cch.equals(cchkBold))
      {
	if(cch.getState())
	  nFontStyle |= Font.BOLD;
	else
	  nFontStyle &= ~Font.BOLD;
      }

      repaint();
      return true;
    }
    else
      return false;
  }
}

// ===========================================
// Class cCheckbox
// ===========================================
class cCheckbox extends Canvas
{
  Image imgChecked;
  Image imgUnchecked;
  Container cont;
  int boxWidth;
  int boxHeight;
  Dimension dimMinSize;
  boolean bChecked = false;
  
  String chkTitle;

  // ===========================================
  // cCheckbox
  // ===========================================
  public cCheckbox(Container parent,
    Image imgCh, Image imgUnch,
    String chkTitle, int width, int height)
  {
    if(imgCh == null || imgUnch == null)
    {
      System.err.println("Invalid image");
      return;
    }
    
    imgChecked = imgCh;
    imgUnchecked = imgUnch;
    cont = parent;
    
    boxWidth  = width;
    boxHeight = height;
    this.chkTitle = chkTitle;
    
    dimMinSize = new Dimension(
      boxWidth, boxHeight);
  }  
  
  // ===========================================
  // getPreferredSize
  // ===========================================
  public Dimension getPreferredSize()
  {
    return dimMinSize;
  }
  
  // ===========================================
  // getMinimumSize
  // ===========================================
  public Dimension getMinimumSize()
  {
    return dimMinSize;
  }
  
  // ===========================================
  // preferredSize
  // ===========================================
  public Dimension preferredSize()
  {
    return dimMinSize;
  }
  
  // ===========================================
  // minimumSize
  // ===========================================
  public Dimension minimumSize()
  {
    return dimMinSize;
  }
  
  // ===========================================
  // paint
  // ===========================================
  public void paint(Graphics g)
  {
    FontMetrics fm = g.getFontMetrics();
    
    int nTitleHeight = fm.getAscent() - 
      fm.getLeading() - fm.getDescent();
      
    int x0 = boxHeight + 10;
    int y0 = ((boxHeight - nTitleHeight) / 2) +
       nTitleHeight;
    
    if(bChecked)
    {
      g.drawImage(imgChecked, 0, 0, this);
      g.drawString(chkTitle, x0, y0);
    }
    else
    {
      g.drawImage(imgUnchecked, 0, 0, this);
      g.drawString(chkTitle, x0, y0);
    }
  }
  
  // ===========================================
  // mouseDown
  // ===========================================
  public boolean mouseDown(
    Event ev, int x, int y)
  {
    if(bChecked)
      bChecked = false;
    else
      bChecked = true;
    
    repaint();
    doAction();
    return true;
  }

  // ===========================================
  // doAction
  // ===========================================
  public void doAction()
  {
    Event evt = new Event(this, 0, this);
    cont.action(evt, (Object)this);
  }

  // ===========================================
  // getState
  // ===========================================
  public boolean getState()
  {
    return bChecked;
  }
  
  // ===========================================
  // setState
  // ===========================================
  public void setState(boolean bNewState)
  {
    bChecked = bNewState;
  }
}

[Назад]