Как создать на панели инструментов

Toolbar представляет собой контейнер, что группы из нескольких компонентов в строке или столбце. Эти компоненты являются наиболее часто кнопки. Панели инструментов создаются с помощью JToolBar класс имеющихся в Java Swing.

Пример кода ниже показано, как использовать панели инструментов в Swing приложения:


import java.awt.*;

import java.awt.event.*;

import javax.swing.*; 



public class ToolBar extends JFrame {



    public ToolBar() {

        super("ToolBar");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        ImageIcon image1 = new ImageIcon("button1.gif");

        JButton button1 = new JButton(image1);

        ImageIcon image2 = new ImageIcon("button2.gif");

        JButton button2 = new JButton(image2);

        ImageIcon image3 = new ImageIcon("button3.gif");

        JButton button3 = new JButton(image3);

        JToolBar bar = new JToolBar();

        bar.add(button1);

        bar.add(button2);

        bar.add(button3);

        JTextArea edit = new JTextArea(8,40);

        JScrollPane scroll = new JScrollPane(edit);

        JPanel pane = new JPanel();

        BorderLayout bord = new BorderLayout();

        pane.setLayout(bord);

        pane.add("North", bar);

        pane.add("Center", scroll);



        setContentPane(pane);

    }



    public static void main(String[] arguments) {

        ToolBar frame = new ToolBar();

        frame.pack();

        frame.setVisible(true);

    }

}

Что такое Java как раз компилятор

В Java вы должны написать и подготовить программу только один раз. Java на любой платформе будет интерпретировать скомпилированный байт-код в инструкции, понятные конкретного процессора. Однако виртуальная Java-машина обрабатывает только одну инструкцию байт-кода в то время, что делает выполнение медленно. Но с использованием Java точно в срок компилятора на конкретной платформе система компилирует байт-код в частности код системы. После код был (перерегистрации), составленная компилятор, то она обычно быстрее запускать на компьютере.

Точно в срок компилятор поставляется с JVM и используются факультативно. В нем скомпилированы в байт-код для конкретной платформы исполняемого кода, который немедленно казнены. JIT компилятору опцию следует использовать, особенно если метод исполняемого многократно использоваться в коде.

Ссылаться на использование метода отражения

Отражения используется для вызова метода, когда имя метода поставляется во время выполнения. Этот совет будет показывать пример кода для этого.


import java.lang.reflect.Method;



public class RunMthdRef {

  public int add(int a, int b) {

    return a+b;

  }



  public int sub(int a, int b) {

    return a-b;

  }



  public int mul(int a, int b) {

    return a*b;

  }



  public int div(int a, int b) {

    return a/b;

  }



  public static void main(String[] args) {

    try {

      Integer[] input={new Integer(2),new Integer(6)};

      Class cl=Class.forName("RunMthdRef");

      Class[] par=new Class[2];

      par[0]=Integer.TYPE;

      par[1]=Integer.TYPE;

      Method mthd=cl.getMethod("add",par);

      Integer output=(Integer)mthd.invoke(new RunMthdRef(),input);

      System.out.println(output.intValue());

    catch (Exception e) {

      e.printStackTrace();

    

  }

}

Сделать Введите ключевые действовать как клавишу табуляции

Сначала создайте TextField, которые слушают Войти и реагировать, как ключ Tab [JDK11]


import java.awt.*;

import java.awt.event.*;



public class MyTextField extends TextField {

    MyTextField(int len) {

        super(len);

        addKeyListener(new KeyAdapter() {

            public void keyPressed(KeyEvent evt) {

                int key = evt.getKeyCode();

                if (key == KeyEvent.VK_ENTER)

                    transferFocus();}});

    }

}

использовать его, попробуйте что-то вроде этого:


import java.applet.*;

import java.awt.*;

import java.awt.event.*;



public class TestEnterAsTab extends Applet {

    MyTextField t1, t2;

    public void init(){

        MyTextField t1 = new MyTextField(10);

        MyTextField t2 = new MyTextField(10);

        add(t1);add(t2);

    }

}

Что такое Java 2 подкласса

Подкласса Java представляет собой класс, который наследует метод или методы из суперкласса Java.

Класс Java может быть как подкласс, суперкласса, оба или ни одной!

Класс Cat в следующем примере подкласса и класса животного является суперкласса.


public class Animal {



    public static void hide() {

        System.out.println("The hide method in Animal.");

    }



    public void override() {

        System.out.println("The override method in Animal.");

    }

}



public class Cat extends Animal {



    public static void hide() {

        System.out.println("The hide method in Cat.");

    }



    public void override() {

        System.out.println("The override method in Cat.");

    }



    public static void main(String[] args) {

        Cat myCat = new Cat();

        Animal myAnimal = (Animal)myCat;

        myAnimal.hide();

        myAnimal.override();

    }

}

Введение в autoboxing

Хотя язык программирования Java является объектно-ориентированным языком, это часто бывает, что при использовании языка вам необходимо работать с примитивных типов. Перед J2SE 5.0, работает с примитивного типа требуют повторяющихся работу преобразования между примитивными типами и обертки классов. В этот совет, вы увидите, как новые autoboxing функцию в J2SE 5.0 Ручка переходов - например, между значениями Int типа и значения типа Integer. Подсказка Также обсуждаются некоторые autoboxing соображения, касающиеся определения, когда два численные значения равны.

5 октября 2004 Технология Tip, форматирования вывода с Новым Formatter обсуждали новый способ форматирования вывод, который похож на Е от языка Си. Например, в котором использованы отзыв Е () для печати неотъемлемую ценность. Вот простой пример, который использует Е () метод:


   public class FormatPrint {

     public static void main(String[] args) {

       System.out.printf("There is only %d thing."1);

     }

   }

Подпись Е () в примере FormatPrint это:

printf(String format, Object... args)

Номер 1 является примитивным и не объект, так что вы можете подумать, что строки:

System.out.printf("There is only %d thing.", 1);

Не следует подготовить. Однако autoboxing заботится о ситуации автоматической упаковки целого значения в соответствующем объекте обертку. В версии J2SE 1.4 вам пришлось бы вручную заверните примитивные значения, используя что-то вроде новой Integer (1).

Еще один пример, где автоматического перехода от примитивного может быть полезно, когда вы используете коллекций API. Коллекция класса предназначены для хранения объектов. Рассмотрим следующий простой пример хранения Int значения от 0 до 9 в ArrayList:


   import java.util.ArrayList;



    public class Autoboxing {

      public static void main(String[] args) {

          ArrayList<Integer> list = new ArrayList<Integer>();

          for(int i = 0; i < 10; i++){

             list.add(i);

          }

      }

    }

Сопоставимой программы для J2SE 1.4.2 будут распределены следующим образом:


   import java.util.ArrayList;



   public class ManualBoxing {

     public static void main(String[] args) {

        ArrayList list = new ArrayList();

        for(int i = 0; i < 10; i++){

            list.add(new Integer(i));

        }

     }

   }

С ManualBoxing нужно явно создать объект, используя Integer list.add (новая Integer (I)). Сравните это с Autoboxing, где я это Int autoboxed на объект целое число в строке list.add (I).

Autoboxing хорошо работает с другими новыми функциями J2SE 5.0. Например, функция позволяет autoboxing бесшовной интеграции между общими типами и примитивных типов. В примере ManualBoxing, элементов ArrayList имеют тип объекта. Для сравнения, в примере Autoboxing, элементы списка имеют тип Integer.

Давайте расширим Autoboxing примером для перебора элементов ArrayList и вычислить их сумму. Обратите внимание, что эта новая версия также использует новые J2SE 5.0 улучшенный цикл для перебора элементов.


   import java.util.ArrayList;

   

     public class Autoboxing {

       public static void main(String[] args) {

           ArrayList<Integer> list = new ArrayList<Integer>();

           for(int i = 0; i < 10; i++){

              list.add(i);

           }

           int sum = 0;

          for Integer j : list){

            sum += j;

          }

         System.out.printf("The sum is %d.", sum );

       }

     

Autoboxing используется в ряде мест в обновленном Autoboxing пример. Во-первых, Интс зажаты в целые числа, как они будут добавлены в ArrayList. Тогда Целые Unboxed к Интс, которые будут использоваться при расчете суммы. Наконец, представляющих Int суммы коробочного для использования в Е () заявление.

Прозрачность упаковки и распаковки делает autoboxing проста в использовании. Однако при использовании autoboxing функция требует некоторой осторожности. В частности, тестирование на равенстве объектов, созданных autoboxing не то же самое, как тестирование на равенстве объектов, которые не создаются autoboxing. Чтобы убедиться в этом, посмотрите на следующий BoxingEquality класс:


   import java.util.ArrayList;

   

     public class BoxingEquality {

       public static void main(String[] args) {

          int i = 2;

          int j = 2;

          ArrayList <Integer> list = new ArrayList<Integer>();

          list.add(i);

          list.add(j);

          System.out.printf("It is %b that i ==j.\n",

                            (i==j))//(1)

          System.out.printf("It is %b that " +

                            "list.get(0) == list.get(1).\n",

                            list.get(0)==list.get(1))//(2)

          System.out.printf("It is %b that " +

                         "list.get(0).equals(list.get(1)).",

                         list.get(0).equals(list.get(1)))//(3)

        }

     

Первое выступление в печати BoxingEquality сравнивает равенства примитивов я и Я. Второе заявление для печати сравнивает равенства объектов, созданных autoboxing I и J. Третий оператор печати сравнивает значения объектов, созданных autoboxing I и J. Можно ожидать, что первое и третье заявления для печати, чтобы вернуться верно, но как насчет второго? Вывод BoxingEquality Запуск программы:

It is true that i ==j.
It is true that list.get(0) == list.get(1).
It is true that list.get(0).equals(list.get(1)).

Теперь измените значения I и J в 2000 году.


   import java.util.ArrayList;



   public class BoxingEquality {

     public static void main(String[] args) {

       int i = 2000;

       int j = 2000;

       // . . .

   }

Сохраните, перекомпилировать и перезапустить BoxingEquality. На этот раз результаты разные:

It is true that i ==j.
It is false that list.get(0) == list.get(1).
It is true that list.get(0).equals(list.get(1)).

Первобытные люди равны и значения коробочной Интс равны. Но на этот раз Интс указывают на различные объекты. То, что вы обнаружили, что для малого интегральные значения, объекты будут сохраняться в бассейне так же, как струны. Когда я и J являются 2, один объект указан от двух разных местах. Когда я и J являются 2000, на которые ссылаются две отдельные объекты. Autoboxing гарантировано возвращение того же объекта для целых значений в диапазоне [-128, 127], но реализация может по своему усмотрению, кэшем значений за пределами этого диапазона. Было бы плохо, стиль полагаться на эту кэширования в вашем коде.

В самом деле, тестирование на объекте равенства помощью \u003d\u003d это, конечно, не то, что обычно вы намерены это сделать. Это поучительным примером включена в этот отзыв, потому что легко потерять след ли вы имеете дело с объектами или примитивами, когда компилятор делает ее легкой для вас двигаться вперед и назад между ними.

Более подробную информацию о autoboxing см. Autoboxing.

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

Как получить среднее из набора изображений

Следующий метод Java принимает массив BufferedImage объектов и возвращает среднее изображение, полученное из массива изображений.

Основное применение изображений усреднения удаления шума. Шума изображения, в основном нежелательных и проявляется в пиксели изображения. Это присуще и цифровых камер, и создается, в частности, под действием температуры и в условиях низкой освещенности, и часто видное место в длинных выдержках и фотографии, сделанные при высокой чувствительности ISO. Его эффект аналогичен Film Grain.

Когда изображение сцены неизменный развращены случайные шумы, последовательность этих образов может быть усредненная вместе с тем, чтобы снизить воздействие шума. Это работает, потому что шум возмущает пиксель уровни серого, и положительное возмущение данной величины, как правило, столь же вероятно, как и негативные возмущения и ту же величину. Следовательно, существует тенденция эти "ошибки" в пиксельных серый уровня компенсируют друг друга во все большей степени, так как количество усредненные изображения увеличивается.

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


    public static BufferedImage average(BufferedImage[] images) {

        

        int n = images.length;

        

        // Assuming that all images have the same dimensions

        int w = images[0].getWidth();

        int h = images[0].getHeight();

        

        

        BufferedImage average =

                new BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY);

        

        WritableRaster raster =

                average.getRaster().createCompatibleWritableRaster();

        

        for (int y=0; y < h; ++y)

            for (int x=0; x < w; ++x) {

                

                float sum = 0.0f;

            

                for (int i=0; i<n; ++i)

                    sum = sum + images[i].getRaster().getSample(x, y, 0);

            

                raster.setSample(x, y, 0, Math.round(sum/n));            

            }

        

        average.setData(raster);

        

        return average;

    }

От runtime.exec к ProcessBuilder

Перед JDK 5.0, единственным способом Ответвляемся процесс и запустить его на местном User Runtime заключалась в использовании Exec () Метод java.lang.Runtime класс. JDK 5.0 добавляет новый способ выполнения команды в отдельном процессе, через класс под названием ProcessBuilder. Вы можете найти ProcessBuilder в java.lang пакетом (например, среды выполнения и процесс). Этот совет обсуждает и сравнивает обоих подходов.

Если вы знакомы со средой класс, вы знаете, что оно также позволяет обнаружить использование памяти и добавить выключение крючок. Но, пожалуй, самым популярным использование классов до 5,0 было выполнить команду в отдельном процессе. Это было сделано с помощью одного из шести версий Exec () метод просмотра:

public Process exec(String command)
throws IOException
public Process exec(String command,
String[] envp)
throws IOException
public Process exec(String command,
String[] envp,
File dir)
throws IOException
public Process exec(String[] cmdarray)
throws IOExceptionjava
public Process exec(String[] cmdarray,
String[] envp)
throws IOException
public Process exec(String[] cmdarray,
String[] envp,
File dir)
throws IOException

Перед вызовом Exec () метод, можно указать команду и ее аргументы, настройки переменных окружения, а также рабочего каталога. Все версии метода возвращения java.lang.Process объект для управления созданной процесса. Это позволяет получить входной или выходной поток подпроцесс и статус выхода (помимо имеющейся информации).

Вот, например, DoRuntime, который показывает, как выполнить команду с оригинальным Время просмотра класс. Команда для запуска передается из командной строки.


   import java.io.*;

   import java.util.*;

   

   public class DoRuntime {

     public static void main(String args[]) throws IOException {



       if (args.length <= 0) {

         System.err.println("Need command to run");

         System.exit(-1);

       }



       Runtime runtime = Runtime.getRuntime();

       Process process = runtime.exec(args);

       InputStream is = process.getInputStream();

       InputStreamReader isr = new InputStreamReader(is);

       BufferedReader br = new BufferedReader(isr);

       String line;



       System.out.printf("Output of running %s is:"

           Arrays.toString(args));



       while ((line = br.readLine()) != null) {

         System.out.println(line);

       }



     }

    

Если вы запустите DoRuntime в Solaris так:

java DoRuntime ls

Вы получите вывод, который выглядит примерно следующим образом (в зависимости от содержимого каталога):

Output of running ls is:DoRuntime.class
DoRuntime.java

Linux пользователи также могут перейти в "Ls", как и команда, чтобы получить список каталогов.

На платформе Microsoft Windows, такие команды, как "Dir" являются внутренними для командного процессора, так что одним аргументом командной строки будет кавычки: "CMD / C Dir" (опять же, выход будет зависеть от содержимого каталога) .

>  java DoRuntime "cmd /c dir"
Output of running cmd /c dir is: ...
Directory of C:\...
07/15/2005  09:30 AM    <DIR>          .
07/15/2005  09:30 AM    <DIR>          ..
07/15/2005  09:30 AM             1,146 DoRuntime.class
07/15/2005  09:23 AM               724 DoRuntime.java
...

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

Если вы хотите запускать команды в другую папку, и вам необходимо добавить больше аргументов Exec () команду, вы изменения:

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(command);
File file = new File(other directory);
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(command, null, file);

Второй параметр в вызове EXEC () определяются методом переменных окружения. Поскольку параметр является "нулевой", подпроцесс наследует настройку среды для текущего процесса.

Так что же случилось с таким подходом? Зачем создавать новый подход? Проблема заключается в том, что подход Runtime.exec не всегда позволяют легко настроить и вызывать подпроцессов. Новый класс ProcessBuilder упрощает вещи. С помощью различных методов в классе, вы можете легко изменить переменные среды для процесса, и начало этому процессу.

Вот простое использование ProcessBuilder, который дублирует функции DoRuntime Пример:


   import java.io.*;

   import java.util.*;

   

   public class DoProcessBuilder {

     public static void main(String args[]) throws IOException {



       if (args.length <= 0) {

         System.err.println("Need command to run");

         System.exit(-1);

       }



       Process process = new ProcessBuilder(args).start();

       InputStream is = process.getInputStream();

       InputStreamReader isr = new InputStreamReader(is);

       BufferedReader br = new BufferedReader(isr);

       String line;



       System.out.printf("Output of running %s is:"

          Arrays.toString(args));



       while ((line = br.readLine()) != null) {

         System.out.println(line);

       }



     }

    
> java DoProcessBuilder ls
Output of running ls is:DoProcessBuilder.class
DoProcessBuilder.java
DoRuntime.class
DoRuntime.java

Обратите внимание, что следующие две строки в DoRuntime:

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(command);

были изменены на следующие строки в DoProcessBuilder:

Process process = new ProcessBuilder(command).start();

ProcessBuilder класс имеет два конструктора. Один конструктор принимает список для команды и ее аргументы. Другие конструктор принимает переменное количество аргументов строки.

public ProcessBuilder(List command)
public ProcessBuilder(String... command)

С ProcessBuilder, вы вызываете Start (), чтобы выполнить команду. До вызова Start (), вы можете управлять тем, как этот процесс будет создан. Если вы хотите, чтобы начать процесс в другом каталоге, вы не проходите файла в качестве аргумента командной строки. Вместо этого, вы устанавливаете рабочую директорию процесса строителя путем передачи файлов в каталоге () метод:

public ProcessBuilder directory(File directory)

Существует не очевидный метод тип сеттер в ProcessBuilder для установки переменных окружения. Вместо этого, вы получите карту с переменным через окружающую среду () метод, то можно манипулировать на карте:

ProcessBuilder processBuilder = new ProcessBuilder(command);
Map env = processBuilder.environment();
// manipulate env

Параметры для манипулирования окружающей среды включает в себя добавление переменных окружения с нанесенным () метод, и удаление их с удалить () метод. Например:

ProcessBuilder processBuilder = new ProcessBuilder(
command, arg1, arg2);
Map env = processBuilder.environment();
env.put("var1", "value");
env.remove("var3");

После задаются переменные среды и каталогов, начала звонка ():

processBuilder.directory("Dir");
Process p = processBuilder.start();

Вы также можете Clear () все переменные с окружающей средой и четко установить те, что вы хотите.

С такими методами, как окружающая среда () для добавления и удаления переменных среды в процессе пространстве, и начать () для запуска нового процесса, ProcessBuilder должно облегчить ссылаться подпроцесс с измененной среде процесс.

Вы можете получить исходный набор переменных среды, вызывая GETENV () Метод системы. Поймите, что не все платформы поддерживают изменение переменных окружения. Если вы попытаетесь изменить переменные окружения на платформе, который запрещает это, операция будет бросать или UnsupportedOperationException или IllegalArgumentException. Кроме того, при работе с менеджером безопасности, вам нужно RuntimePermission для "GETENV .*", в противном случае SecurityException будет брошен.

Помнить, что нельзя забывать Start () после вызова Настройка инстанции. И имейте с использованием процесса класс для управления потоками за этот процесс и получить свой статус завершения.

Слова предостережения по поводу примеров на эту тему. Вполне возможно, что примерами в тупике, если подпроцесс генерирует достаточно вывод переполнения системы. Более надежное решение требует осушения STDOUT STDERR процесса и в отдельных потоках.

Для получения дополнительной информации о ProcessBuilder см. в определении класса.

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

Как найти и отображение гиперссылок, содержащихся в веб

Приложение Java написано ниже используются регулярные выражения для поиска и отображения гиперссылок, содержащихся в веб-страницу. После компиляции файла, вы должны сохранить веб-страницу в ту же папку, которая содержит ShowLinks.class.


import java.io.*;

import java.util.regex.*;



public class ShowLinks {

    public static void main(String[] arguments) {

        if (arguments.length < 1) {

            System.out.println("Usage: java ShowLinks [page]");

            System.exit(0);

        }

        String page = loadPage(arguments[0]);

        Pattern pattern = Pattern.compile("<a.+href=\"(.+?)\"");

        Matcher matcher = pattern.matcher(page);

        while (matcher.find()) {

            System.out.printlnmatcher.group(1));

        }

    }



    private static String loadPage(String name) {

        StringBuffer output = new StringBuffer();

        try {

            FileReader file = new FileReader(name);

            BufferedReader buff = new BufferedReader(file);

            boolean eof = false;

            while (!eof) {

                String line = buff.readLine();

                if (line == null)

                    eof = true;

                else

                    output.append(line + "\n");

            }

            buff.close();

        catch (IOException e) {

            System.out.println("Error -- " + e.toString());

        }

        return output.toString();

    }

}

Использовании интерфейс на саксофоне интерфейса

Одним из основных преимуществ является то, что проверку можно комбинировать его с стандартных парсеров, как SAX. В этом случае при обращении SAX случае мы не безразлично документ действителен или нет. Validator будет проверить это для нас. И мы будем получать SAX событий из уже проверены XML содержание. Приведенном ниже показано, как вставить JAXP проверка между исходным XML-файла и SAX-анализатор:


import javax.xml.transform.sax.SAXResult;

import javax.xml.transform.sax.SAXSource;

import javax.xml.transform.stream.StreamSource;

import javax.xml.validation.Schema;

import javax.xml.validation.SchemaFactory;

import javax.xml.validation.Validator;



import org.xml.sax.InputSource;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;



/**

 * A sample application which shows how to perform a

 * XML document validation while parsing XML with SAX.

 */



public class Test {

  public static void main(String[] args) {

    try {

      // create schema by from an XSD file:

      String schemaLang = "http://www.w3.org/2001/XMLSchema";

      SchemaFactory jaxp = SchemaFactory.newInstance(schemaLang);

      Schema schema = jaxp.newSchema(new StreamSource("sample.xsd"));

      // prepare document validator:

      Validator validator = schema.newValidator();



      // prepare SAX handler and SAX result receiving validate data:

      SaxHandler handler = new SaxHandler();

      SAXResult sax = new SAXResult(handler);



      // at last send valid data to out SAX handler:

      SAXSource source = new SAXSource(new InputSource("sample.xml"));

      validator.validate(source, sax);



    }catch (SAXException ex) {

      // we are here if the document is not valid:

      // ... process validation error...

      ex.printStackTrace();

    catch (Exception ex) {

      ex.printStackTrace();

    }

  }



  // our SAX handler receiving validated data:

  private static final class SaxHandler extends DefaultHandler {

    // ...

  }

}

Страница 1 из 3123»