Java состоит из двух групп данных типов, примитивных типов данных и ссылок на объекты.

Java Primitive Data Types

Data Type Purpose Contents Default Value*
boolean Truth value true or false fales
char Character Unicode characters \u0000
byte Signed integer 8 bit two’s complement (byte) 0
short Signed integer 16 bit two’s complement (short) 0
int Signed integer 32 bit two’s complement 0
long Signed integer 64 bit two’s complement 0L
float Real number 32 bit IEEE 754 floating point 0.0f
double Real number 64 bit IEEE 754 floating point 0.0d

Один из способов помню Java примитивных типов данных с помощью этой мнемонический помощь:: С areful, В ушах S houldn't я ngest L Arge F Urry D ОГС.

Экземпляр переменным присваиваются значения по умолчанию; локальные переменные не могут быть присвоены значения по умолчанию.

Список объектов Java являются переменными, которые держат ссылки на объекты. В отличие от Java примитивных типов данных, которые хранят фактические данные, ссылки на объекты хранить только ссылки на фактические данные объекта.

Мы используем наблюдатель / Наблюдаемые механизма обнаружения, если файл данных были Modifed поскольку в последний раз.

Мы используем те же файлы данных и DataFileTableModel как предыдущие инструкции. Некоторые незначительные изменения, которые необходимы для DataFileTable класс. Этот класс сейчас реализует интерфейс наблюдателя (см. Update () метод, который будет вызываться при наблюдаемом объекте отправить уведомление).


[DataFileTable.java]

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import java.io.*;

import java.util.*;



public class DataFileTable extends JPanel

        implements Observer {

    

    protected JTable table;

    protected DataFileTableModel model;

    

    public DataFileTable(String dataFilePath) {

        DataFileWatchdog  wd;

        Font f;

        

        f = new Font("SanSerif",Font.PLAIN,24);

        setFont(f);

        setLayout(new BorderLayout());

        

        model = new DataFileTableModel(dataFilePath);

        

        table = new JTable();

        table.setModel(model);

        table.createDefaultColumnsFromModel();

        

        JScrollPane scrollpane = new JScrollPane(table);

        add(scrollpane);

        

        // this watchdog (an Observable object)

        //   is monitoring any file change

        wd = new DataFileWatchdog(dataFilePath);

        wd.addObserver(this);

    }

    

    public void update(Observable o, Object arg) {

        // reload data because data file have changed

        model.initVectors();

        table.repaint();

    }

    

    public Dimension getPreferredSize(){

        return new Dimension(400300);

    }

    

    public static void main(String s[]) {

        JFrame frame = new JFrame("Data File Table");

        DataFileTable panel;

        

        panel = new DataFileTable("customers.dat");

        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        frame.setForeground(Color.black);

        frame.setBackground(Color.lightGray);

        frame.getContentPane().add(panel,"Center");

        

        frame.setSize(panel.getPreferredSize());

        frame.setVisible(true);

        frame.addWindowListener(new WindowCloser());

    }

}



class WindowCloser extends WindowAdapter {

    public void windowClosing(WindowEvent e) {

        Window win = e.getWindow();

        win.setVisible(false);

        System.exit(0);

    }

}

DataFileWatchdog, наблюдаемый объект, проста. Мы используем Свинг таймер, чтобы проверить каждую секунду, если заданный файл изменились. Если метка отличается, то последний, то все зарегистрированные наблюдатели уведомляются об этом.


[DataFileWatchdog.java]

import javax.swing.Timer;

import java.awt.event.*;

import java.io.*;

import java.util.*;



public class DataFileWatchdog extends Observable

        implements ActionListener {

    

    Timer t = new Timer(1000,this)// check every second

    long lastModified;

    String file;

    

    DataFileWatchdog(String s) {

        file = s;

        File f = new File(file);

        lastModified = f.lastModified()// original timestamp

        t.start();

    }

    

    public void actionPerformed(ActionEvent e) {

        File f = new File(file);

        long actualLastModified = f.lastModified() ;

        if (lastModified != actualLastModified) {

            // the file have changed

            lastModified = actualLastModified;

            setChanged();

            notifyObservers();

        }

    }

}

Этот совет Java Swing иллюстрирует метод анимации серии изображений, расположенный на месте. Разработчики могут использовать этот совет для создания анимации в их applicationa рисунок с файлами. Эта подсказка может быть использована для анимированных логотипов применения.


import java.awt.*;

import java.awt.event.*;

import javax.swing.*;



public class LogoAnimator extends JPanel

                          implements ActionListener {

   protected ImageIcon images[];

   protected int totalImages = 30,

                 currentImage = 0,

                 animationDelay = 50// 50 millisecond delay

   protected Timer animationTimer;



   public LogoAnimator()

   {

      setSizegetPreferredSize() );



      images = new ImageIcontotalImages ];



      for int i = 0; i < images.length; ++i 

         images=

            new ImageIcon"images/java" + i + ".gif" );



      startAnimation();

   }



   public void paintComponentGraphics g )

   {

      super.paintComponent);



      if imagescurrentImage ].getImageLoadStatus() ==

           MediaTracker.COMPLETE ) {

         imagescurrentImage ].paintIconthis, g, 0);

         currentImage = currentImage + % totalImages;

      }

   }



   public void actionPerformedActionEvent e )

   {

      repaint();

   }



   public void startAnimation()

   {

      if animationTimer == null ) {

         currentImage = 0;  

         animationTimer = new TimeranimationDelay, this );

         animationTimer.start();

      }

      else  // continue from last image displayed

         if ! animationTimer.isRunning() )

            animationTimer.restart();

   }



   public void stopAnimation()

   {

      animationTimer.stop();

   }



   public Dimension getMinimumSize()

   

      return getPreferredSize()

   }



   public Dimension getPreferredSize()

   {

      return new Dimension16080 );

   }



   public static void mainString args[] )

   {

      LogoAnimator anim = new LogoAnimator();



      JFrame app = new JFrame"Animator test" );

      app.getContentPane().addanim, BorderLayout.CENTER );



      app.addWindowListener(

         new WindowAdapter() {

            public void windowClosingWindowEvent e )

            {

               System.exit);

            }

         }

      );



      // The constants 10 and 30 are used below to size the

      // window 10 pixels wider than the animation and

      // 30 pixels taller than the animation. 

      app.setSizeanim.getPreferredSize().width + 10,

                   anim.getPreferredSize().height + 30 );

   }

}

Вы можете использовать следующий код, чтобы обрезать subimage из образа.


import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

import java.io.*;

import javax.imageio.ImageIO;

import javax.swing.*;

import javax.swing.event.MouseInputAdapter;

 

public class Cropping extends JPanel

{

    BufferedImage image;

    Dimension size;

    Rectangle clip;

    boolean showClip;

 

    public Cropping(BufferedImage image)

    {

        this.image = image;

        size = new Dimension(image.getWidth(), image.getHeight());

        showClip = false;

    }

 

    protected void paintComponent(Graphics g)

    {

        super.paintComponent(g);

        Graphics2D g2 = (Graphics2D)g;

        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

                            RenderingHints.VALUE_ANTIALIAS_ON);

        int x = (getWidth() - size.width)/2;

        int y = (getHeight() - size.height)/2;

        g2.drawImage(image, x, y, this);

        if(showClip)

        {

            if(clip == null)

                createClip();

            g2.setPaint(Color.red);

            g2.draw(clip);

        }

    }

 

    public void setClip(int x, int y)

    {

        // keep clip within raster

        int x0 = (getWidth() - size.width)/2;

        int y0 = (getHeight() - size.height)/2;

        if(x < x0 || x + clip.width  > x0 + size.width ||

           y < y0 || y + clip.height > y0 + size.height)

            return;

        clip.setLocation(x, y);

        repaint();

    }

 

    public Dimension getPreferredSize()

    {

        return size;

    }

 

    private void createClip()

    {

        clip = new Rectangle(140140);

        clip.x = (getWidth() - clip.width)/2;

        clip.y = (getHeight() - clip.height)/2;

    }

 

    private void clipImage()

    {

        BufferedImage clipped = null;

        try

        {

            int w = clip.width;

            int h = clip.height;

            int x0 = (getWidth()  - size.width)/2;

            int y0 = (getHeight() - size.height)/2;

            int x = clip.x - x0;

            int y = clip.y - y0;

            clipped = image.getSubimage(x, y, w, h);

        }

        catch(RasterFormatException rfe)

        {

            System.out.println("raster format error: " + rfe.getMessage());

            return;

        }

        JLabel label = new JLabel(new ImageIcon(clipped));

        JOptionPane.showMessageDialog(this, label, "clipped image",

                                      JOptionPane.PLAIN_MESSAGE);

    }

 

    private JPanel getUIPanel()

    {

        final JCheckBox clipBox = new JCheckBox("show clip", showClip);

        clipBox.addActionListener(new ActionListener()

        {

            public void actionPerformed(ActionEvent e)

            {

                showClip = clipBox.isSelected();

                repaint();

            }

        });

        JButton clip = new JButton("clip image");

        clip.addActionListener(new ActionListener()

        {

            public void actionPerformed(ActionEvent e)

            {

                clipImage();

            }

        });

        JPanel panel = new JPanel();

        panel.add(clipBox);

        panel.add(clip);

        return panel;

    }

 

    public static void main(String[] argsthrows IOException

    {

        File file = new File("images/cougar.jpg");

        Cropping test = new Cropping(ImageIO.read(file));

        ClipMover mover = new ClipMover(test);

        test.addMouseListener(mover);

        test.addMouseMotionListener(mover);

        JFrame f = new JFrame();

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        f.getContentPane().add(new JScrollPane(test));

        f.getContentPane().add(test.getUIPanel()"South");

        f.setSize(400,400);

        f.setLocation(200,200);

        f.setVisible(true);

    }

}

 

class ClipMover extends MouseInputAdapter

{

    Cropping cropping;

    Point offset;

    boolean dragging;

 

    public ClipMover(Cropping c)

    {

        cropping = c;

        offset = new Point();

        dragging = false;

    }

 

    public void mousePressed(MouseEvent e)

    {

        Point p = e.getPoint();

        if(cropping.clip.contains(p))

        {

            offset.x = p.x - cropping.clip.x;

            offset.y = p.y - cropping.clip.y;

            dragging = true;

        }

    }

 

    public void mouseReleased(MouseEvent e)

    {

        dragging = false;

    }

 

    public void mouseDragged(MouseEvent e)

    {

        if(dragging)

        {

            int x = e.getX() - offset.x;

            int y = e.getY() - offset.y;

            cropping.setClip(x, y);

        }

    }

}


Когда генерируется исключение, исполнение в методе занимает довольно резкое, нелинейные пути, который изменяет нормальный поток через метод. В зависимости от того, как кодируется метод, метод может вернуть досрочно. Например, если метод открывает соединение с базой данных о въезде и закрывает его при выходе из него, тогда вы не хотите, чтобы код, который закрывает файл, который будет обойти, за исключением механизма обработки ключевых слов, наконец, предназначен для решения таких непредвиденных обстоятельств.

"Наконец" создает блок кода, который будет выполнен после Try / Catch блока завершена и перед кодом после Try / Catch блока. И наконец блок будет выполнять или не генерируется исключение.

Если бросить исключение, наконец, блок будет выполнить, даже если не поймут заявления соответствующего исключения. Наконец гарантированно выполнить, даже если они брошены без исключения. Наконец блока является идеальной позиции для закрытия таких ресурсов, как дескриптор файла или базы данных, соединения и т.п.


public class FinallyDemo {



  static void procA(){



    try{

      System.out.println("inside procA");

      throw new RuntimeException("demo");

      

    }finally{

      System.out.println("procA's finally");

    }

  }



  //Return from with in a try block.

  static void procB(){



    try{

      System.out.println("inside procB");

      return;

    }

    finally{

      System.out.println("procB's finally");

    }

  }



  //Execute a try block normally.

  static void procC(){



    try{

      System.out.println("inside procC");

    }

    finally{

      System.out.println("procC's finally");

    }  

  }



  public static void main(String[] args) {



    try{

      procA();

    }catch(Exception e){

      System.out.println("Exception caught");

      

    }



    procB();

    procC();



  }



}

Вывод на экран:

inside procA
procA's finally
Exception caught
inside procB
procB's finally
inside procC
procC's final

НЕТ! Удивительно большое число людей, в том числе многие веб-дизайнеры, не понимают разницы между Java и JavaScript. Вкратце его можно сформулировать следующим образом:

Java была разработана Sun Microsystems. Java является полноценным объектно-ориентированный язык программирования. Она может быть использована для создания автономных приложений и апплетов. Апплеты загружаются в виде отдельных файлов на вашем браузере ряд документов HTML, а также предоставить бесконечное множество дополнительных возможностей для веб-сайта вы посетили. Результаты отображаются апплетов может оказаться встроенных в страницу HTML (например, прокрутка сообщения баннер, которая так часто встречается на Java расширение участков), но код Java прибыли в виде отдельного файла.

JavaScript с другой стороны, был разработан Netscape, является меньшим и более простой язык сценариев, который не создает апплет или автономные приложения. В своей наиболее распространенной форме Сегодня, JavaScript находится внутри документы HTML, и может обеспечить уровень интерактивности далеко за рамки обычно плоские страницы HTML — без необходимости в серверных CGI (Common Gateway Interface) программами.

Некоторые серверного программного обеспечения, такими как SuiteSpot Netscape, позволяющая разработчикам веб-приложений написать CGI программ в серверной версии JavaScript. Оба клиентского и серверного JavaScript одни и те же основные языке JavaScript, но каждая сторона сделки с различными объектами. Клиентские объекты преимущественно компоненты веб-страницы HTML (например, формы, надписи, кнопки). На стороне сервера это те объекты, которые облегчают обработку заявок, которые приходят от клиентов, а также подключение к базам данных.



java.awt.print



import java.awt.Color;

import java.awt.Component;

import java.awt.Dimension;

import java.awt.Event;

import java.awt.Font;

import java.awt.GradientPaint;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Paint;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.KeyEvent;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.font.FontRenderContext;

import java.awt.font.LineMetrics;

import java.awt.geom.Rectangle2D;

import java.awt.print.PageFormat;

import java.awt.print.Printable;

import java.awt.print.PrinterException;

import java.awt.print.PrinterJob;



import javax.swing.AbstractAction;

import javax.swing.JComponent;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.KeyStroke;



public class SwingPrinter extends JFrame {

  public static void main(String[] args) {

    new SwingPrinter();

  }



  private PageFormat mPageFormat;



  public SwingPrinter() {

    super("SwingPrinter v1.0");

    createUI();

    PrinterJob pj = PrinterJob.getPrinterJob();

    mPageFormat = pj.defaultPage();

    setVisible(true);

  }



  protected void createUI() {

    setSize(300300);

    center();



    // Add the menu bar.

    JMenuBar mb = new JMenuBar();

    JMenu file = new JMenu("File"true);

    file.add(new FilePrintAction()).setAccelerator(

        KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK));

    file.add(new FilePageSetupAction()).setAccelerator(

        KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK

            | Event.SHIFT_MASK));

    file.addSeparator();

    file.add(new FileQuitAction()).setAccelerator(

        KeyStroke.getKeyStroke(KeyEvent.VK_Q, Event.CTRL_MASK));

    mb.add(file);

    setJMenuBar(mb);



    // Add the contents of the window.

    getContentPane().add(new PatchworkComponent());



    // Exit the application when the window is closed.

    addWindowListener(new WindowAdapter() {

      public void windowClosing(WindowEvent e) {

        System.exit(0);

      }

    });

  }



  protected void center() {

    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();

    Dimension us = getSize();

    int x = (screen.width - us.width2;

    int y = (screen.height - us.height2;

    setLocation(x, y);

  }



  public class FilePrintAction extends AbstractAction {

    public FilePrintAction() {

      super("Print");

    }



    public void actionPerformed(ActionEvent ae) {

      PrinterJob pj = PrinterJob.getPrinterJob();

      ComponentPrintable cp = new ComponentPrintable(getContentPane());

      pj.setPrintable(cp, mPageFormat);

      if (pj.printDialog()) {

        try {

          pj.print();

        catch (PrinterException e) {

          System.out.println(e);

        }

      }

    }

  }



  public class FilePageSetupAction extends AbstractAction {

    public FilePageSetupAction() {

      super("Page setup...");

    }



    public void actionPerformed(ActionEvent ae) {

      PrinterJob pj = PrinterJob.getPrinterJob();

      mPageFormat = pj.pageDialog(mPageFormat);

    }

  }



  public class FileQuitAction extends AbstractAction {

    public FileQuitAction() {

      super("Quit");

    }



    public void actionPerformed(ActionEvent ae) {

      System.exit(0);

    }

  }

}

class PatchworkComponent extends JComponent implements Printable {



  private float mSide = 36;



  private float mOffset = 36;



  private int mColumns = 8;



  private int mRows = 4;



  private String mString = "Java Source and Support";



  private Font mFont = new Font("Serif", Font.PLAIN, 64);



  private Paint mHorizontalGradient, mVerticalGradient;



  public PatchworkComponent() {

    float x = mOffset;

    float y = mOffset;

    float halfSide = mSide / 2;

    float x0 = x + halfSide;

    float y0 = y;

    float x1 = x + halfSide;

    float y1 = y + (mRows * mSide);

    mVerticalGradient = new GradientPaint(x0, y0, Color.darkGray, x1, y1,

        Color.lightGray, true);

    x0 = x;

    y0 = y + halfSide;

    x1 = x + (mColumns * mSide);

    y1 = y + halfSide;

    mHorizontalGradient = new GradientPaint(x0, y0, Color.darkGray, x1, y1,

        Color.lightGray, true);

  }



  public PatchworkComponent(String s) {

    this();

    mString = s;

  }



  public void paintComponent(Graphics g) {

    Graphics2D g2 = (Graphics2Dg;



    g2.rotate(Math.PI / 24, mOffset, mOffset);



    for (int row = 0; row < mRows; row++) {

      for (int column = 0; column < mColumns; column++) {

        float x = column * mSide + mOffset;

        float y = row * mSide + mOffset;



        if (((column + row2== 0)

          g2.setPaint(mVerticalGradient);

        else

          g2.setPaint(mHorizontalGradient);



        Rectangle2D r = new Rectangle2D.Float(x, y, mSide, mSide);

        g2.fill(r);

      }

    }



    FontRenderContext frc = g2.getFontRenderContext();

    float width = (floatmFont.getStringBounds(mString, frc).getWidth();

    LineMetrics lm = mFont.getLineMetrics(mString, frc);

    float x = ((mColumns * mSide- width+ mOffset;

    float y = ((mRows * mSide+ lm.getAscent()) + mOffset;

    g2.setFont(mFont);

    g2.setPaint(Color.white);

    g2.drawString(mString, x, y);

  }



  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {

    if (pageIndex != 0)

      return NO_SUCH_PAGE;

    paintComponent(g);

    return PAGE_EXISTS;

  }

}

class ComponentPrintable implements Printable {

  private Component mComponent;



  public ComponentPrintable(Component c) {

    mComponent = c;

  }



  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {

    if (pageIndex > 0)

      return NO_SUCH_PAGE;

    Graphics2D g2 = (Graphics2Dg;

    g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

    boolean wasBuffered = disableDoubleBuffering(mComponent);

    mComponent.paint(g2);

    restoreDoubleBuffering(mComponent, wasBuffered);

    return PAGE_EXISTS;

  }



  private boolean disableDoubleBuffering(Component c) {

    if (instanceof JComponent == false)

      return false;

    JComponent jc = (JComponentc;

    boolean wasBuffered = jc.isDoubleBuffered();

    jc.setDoubleBuffered(false);

    return wasBuffered;

  }



  private void restoreDoubleBuffering(Component c, boolean wasBuffered) {

    if (instanceof JComponent)

      ((JComponentc).setDoubleBuffered(wasBuffered);

  }

}

Этот совет Java демонстрирует метод рисования основных форм с использованием линий и кривых на компоненты Java. Основными формами может быть сделан разработчиком перезаписи Paint () функцию компонента.


    // x, y, controlpointx, controlpointy,controlpointx1, controlpointy1, 

    // controlpointx2, controlpointy2 may be define by the developer

    GeneralPath shape = new GeneralPath();

    shape.moveTo(x, y);

    shape.lineTo(x, y);

    shape.quadTo(controlPointX, controlPointY, x, y);

    shape.curveTo(controlPointX1, controlPointY1, controlPointX2, 

      controlPointY2, x, y);

    shape.closePath();

Этот совет Java иллюстрирует метод планирования таймера для задачи запустить повторно. Разработчик может использовать этот код, если есть необходимость выполнить или повторить задачу в заявку на предопределенный отрезок времени.


    int delay = 5000;   // delay for 5 sec.

    int interval = 1000;  // iterate every sec.

    Timer timer = new Timer();

    

    timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {

                // Task here ...

            }

        }, delay, interval);