Банк файла архива Java которая представляет собой набор файлов класса.

JAR-файлы упакованы с форматом ZIP, так что вы можете открыть. JAR-файлы с обычной программой распаковать!

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


    try {

        // Open the ZIP file

        String sourcefile = "source.zip";

        ZipInputStream in = new ZipInputStream(new FileInputStream(sourcefile));

    

        // Get the first entry

        ZipEntry entry = in.getNextEntry();

    

        // Open the output file

        String targetfile = "target";

        OutputStream out = new FileOutputStream(targetfile);

    

        // Transfer bytes from the ZIP file to the output file

        byte[] buf = new byte[1024];

        int len;

        while ((len = in.read(buf)) 0) {

            out.write(buf, 0, len);

        }

    

        // Close the streams

        out.close();

        in.close();

    catch (IOException e) {

    }

Этот совет Java demostrates как нарисовать текст в компоненте лица. Текст можно сделать путем перезаписи Paint () функцию компонента.


public void paint(Graphics g) {



        // Set the font for example Lucida Sans Typewriter if it is

        // different from the default font

        String family = "Lucida Sans Typewriter";

        int style = Font.PLAIN;

        int size = 18;

        Font font = new Font(family, style, size);



        g.setFont(font);

    

        // Draw a text such that its base line is at x, y

        int x = 10;

        int y = 10;



        g.drawString("Text", x, y);

    

    

        // Draw a text such that the top-left corner is at x, y

        x = 10;

        y = 30;

        FontMetrics fontMetrics = g.getFontMetrics();

        g.drawString("text", x, y+fontMetrics.getAscent());

}

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


import java.io.*;

import java.awt.*;

import javax.swing.*;



public class ProgressMonitorInputExample {

    

    public ProgressMonitorInputExample(String filename) {

        ProgressMonitorInputStream monitor;

        try {

            monitor = new ProgressMonitorInputStream(

                    null, "Loading "+filename, 

                    new FileInputStream(filename));

            

            while (monitor.available() 0) {

                byte[] data = new byte[38];

                monitor.read(data);

                System.out.write(data);

            }

        catch (FileNotFoundException e) {

            JOptionPane.showMessageDialog(null, 

                    "Unable to find file: "

                    + filename, "Error", JOptionPane.ERROR_MESSAGE);

            

        catch (IOException e) {;}

    }

    

    public static void main(String args[]) {

        new ProgressMonitorInputExample(args[0]);

    }

}

Вы не можете иметь два метода в том же классе с подписями, которые отличаются только типом возвращаемого значения. До J2SE 5.0 релиза, верно также и то, что класс не может переопределить тип возвращаемого методы, которые он наследует от суперкласса. В этом совете вы узнаете о новой функции в J2SE 5.0, что позволяет ковариантной типы возвращения. Что это означает, что метод в подклассе может вернуть объект, тип которого является подклассом тип, возвращаемый методом с той же подписью в суперкласса. Эта функция устраняет необходимость в чрезмерной проверку типа и литья.

Давайте начнем со следующего класса, ConfusedClass. Класс пытается объявить два метода с той же подписью. Один из методов возвращает JTextField, а другая возвращается JPasswordField.


   import javax.swing.JTextField;

   import javax.swing.JPasswordField;



   public class ConfusedClass {



     public JTextField getTextField(){

       return new JTextField();

     }

  

     public JPasswordField getTextField(){

       return new JPasswordField();

     }

   }

Если попытаться обобщить ConfusedClass, вы получите следующую ошибку компиляции:

ConfusedClass.java:10: getTextField() is already defined in
ConfusedClass
public JPasswordField getTextField(){
^
1 error

Глядя на эту ситуацию с точки зрения класса призыв getTextField (), вы можете увидеть причину ошибки компиляции. Как бы вы указать, какой из двух методов, вы ориентируетесь? Возьмем, к примеру, этот фрагмент:


   ConfusedClass cc = new ConfusedClass();

   JTextField field = cc.getTextField();

Поскольку JPasswordField распространяется JTextField, либо вариант метода может правильно назвать.

Далее, создайте два класса, каждый из которых с различными версиями getTextField () методы. Эти два метода различаются по осуществлению и тип возвращаемого значения. Начните с следующие основания:


   import javax.swing.JTextField;



   public class ConfusedSuperClass {



     public JTextField getTextField(){

       System.out.println("Called in " this.getClass());

       return new JTextField();

     }

  

   }

Обобщение ConfusedSuperClass. Вы увидите, что он компилирует без ошибок. Теперь создайте производный класс, который распространяется ConfusedSuperClass. Производный класс попытки вернуть экземпляр JPasswordField вместо JTextField возвращается getTextField () в ConfusedSuperClass.


   import javax.swing.JPasswordField;



   public class ConfusedSubClass extends ConfusedSuperClass {



     public JPasswordField getTextField(){

       System.out.println("Called in " this.getClass());

       return new JPasswordField();

     }

  

   }

Если вы используете версию JDK до J2SE 5.0, ConfusedSubClass не будет компилироваться. Вы увидите сообщение об ошибке, подобное следующему.

ConfusedSubClass.java:5: getTextField() in ConfusedSubClass
cannot override getTextField() in ConfusedSuperClass;
attempting to use incompatible return type
found   : javax.swing.JPasswordField
required: javax.swing.JTextField
public JPasswordField getTextField(){
^
1 error

Ошибка сообщили, что вы пытаетесь использовать несовместимые тип возвращения. В самом деле, JPasswordField вы пытаетесь вернуть является подтипом JTextField. Этот же код компилируется, правильно под J2SE 5.0. Теперь разрешается отменять тип возвращаемого методом с подтипом первоначального типа. В текущем примере getTextField () в ConfusedSuperClass возвращает экземпляр типа JTextField. GetTextField () в ConfusedSubClass возвращает экземпляр типа JPasswordField.

Вы можете воспользоваться этими двумя классами с NotConfusedClient следующий класс. Этот класс создает экземпляр типа ConfusedSuperClass и типа ConfusedSubClass. Затем она вызывает getTextField () на каждом экземпляре, и отображает соответствующий тип объекта, возвращенного методом.


   import javax.swing.JTextField;



   public class NotConfusedClient {

     static JTextField jTextField;



     public static void main(String[] args) {

       System.out.println("===== Super Class =====");

       jTextField = new ConfusedSuperClass().getTextField();

       System.out.println("Got back an instance of "

         + jTextField.getClass());

       System.out.println("===== Sub Class =====");

       jTextField = new ConfusedSubClass().getTextField();

       System.out.println("Got back an instance of  "

         + jTextField.getClass());

     }

   }

Обобщение и запустить NotConfusedClient. Когда вы запустите ее, вы должны увидеть следующий вывод:

===== Super Class =====
Called in class ConfusedSuperClass
Got back an instance of class javax.swing.JTextField
===== Sub Class =====
Called in class ConfusedSubClass
Got back an instance of  class javax.swing.JPasswordField

В самом деле, вы получите тот же результат, если вы меняете тип возврата getTextField (), чтобы JTextField в ConfusedSubClass. Выигрыш происходит при использовании объектов, которые возвращаются при обращении к getTextField (). Перед J2SE 5.0, Вам необходимо опустив воспользоваться методами, которые присутствуют в производный класс, но не в базовом классе. Как вы видели, в J2SE 5.0 ConfusedSubClass компилирует с различным типом возврата, указанного для getTextField (), чем в настоящее суперкласса. Теперь вы можете использовать ваш тип ковариантной вернуться к вызвать метод, который доступен только в подтипа. Во-первых, изменили супертип следующим образом:


   public class SuperClass {



     public SuperClass getAnObject(){

       return this;

     }



   }

Добавить эксклюзивный метод соответствующего подкласса, а также изменить тип возвращаемого getAnObject () метод:


   public class SubClass extends SuperClass {



     public SubClass getAnObject(){

       return this;

     }



     public void exclusiveMethod(){

       System.out.println("Exclusive in Subclass.");

     }

  

     public static void main(String[] args) {

         System.out.println("===== Call Exclusive method =====");

         new SubClass().getAnObject().exclusiveMethod();

     



   }

Обобщение суперкласс и подкласс, затем запустите SubClass. Вы должны увидеть следующее сообщение:

===== Call Exclusive method =====
Exclusive in Subclass.

Основной () метод создает экземпляр подкласса. Затем она вызывает getAnObject (). Из этого следует, это с призывом exclusiveMethod () на возвращен объект типа SubClass. Если тип возврата getAnObject () была SuperClass в SubClass.java, код не будет скомпилирован.

Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.

Расчет среднего значения изображение записывается в следующий метод. Хотя пример написан для изображений в серой уровня, вы можете изменить метод для применения его в RGB изображения легко. Вам просто необходимо для вычисления среднего значения для каждого канала (красный, зеленый или синий канал). Вы можете получить значения пикселей по другим каналам, изменяя третий параметр getSample (X, Y, channelNo) метод класса растра.


    public static double meanValue(BufferedImage image) {

        

        Raster raster = image.getRaster();        

        double sum = 0.0;

        

        for (int y=0; y < image.getHeight(); ++y)

            for (int x=0; x < image.getWidth(); ++x)

                sum += raster.getSample(x,y,0);

        

        return sum / (image.getWidth() * image.getHeight());

    }

Настройка события происходят при перемещении компонента JScrollBar. Для обработки этих событий, класс должен реализовывать интерфейс AdjustmentListener. AdjustmentValueChanged (AdjustmentEvent) метод является единственным методом, в интерфейсе AdjustmentListener.

В следующем примере показано, как использовать события в корректировке Свинг:


import java.awt.event.*;

import javax.swing.*;

import java.awt.*;



public class WellAdjusted extends JFrame implements AdjustmentListener {

    JTextField value = new JTextField("50"30);

    JScrollBar bar = new JScrollBar(SwingConstants.HORIZONTAL,

        50100100);



    public WellAdjusted() {

        super("Well Adjusted");

        setSize(350100);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        bar.addAdjustmentListener(this);

        value.setHorizontalAlignment(SwingConstants.CENTER);

        value.setEditable(false);

        JPanel pane = new JPanel();

        pane.setLayout(new BorderLayout());

        pane.add(value, "Center");

        pane.add(bar, "South");

        setContentPane(pane);

    }



    public static void main(String[] arguments) {

        JFrame frame = new WellAdjusted();

        frame.show();

    }



    public void adjustmentValueChanged(AdjustmentEvent evt) {

        Object source = evt.getSource();

        if (source == bar) {

            int newValue = bar.getValue();

            value.setText("" + newValue);

        }

        repaint();

    }

}

Предположим, что у Вас есть текстовый участок, и вы хотите, чтобы процесс его содержания строка за строкой. В таком случае вы можете легко использовать StringReader класс.

The follwoing example shows how to print the first character of each line of a textarea content:


String str;

        

BufferedReader reader = new BufferedReader(

  new StringReader(contentTextArea.getText()));

        

try {

  while ((str = reader.readLine()) != null) {

                

          if (str.length() 0System.out.println(str.charAt(0));

                

        }



catch(IOException e) {

  e.printStackTrace();

}

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


    import java.util.regex.*;

    

    public class BasicMatch {

        public static void main(String[] args) {



            // Compile a regular expression

            String patternStr = "b";

            Pattern pattern = Pattern.compile(patternStr);

    

            // Check for the existence of the pattern

            CharSequence inputStr = "a b c b";

            Matcher matcher = pattern.matcher(inputStr);

            boolean matchFound = matcher.find();    // true

    

            // Retrieve matching string

            String match = matcher.group();         // b

    

            // Retrieve indices of matching string

            int start = matcher.start();            // 2

            int end = matcher.end();                // 3

            // the end is index of the last matching character + 1

    

            // Find the next occurrence

            matchFound = matcher.find();            // true

        }

    }