Jython — Обзор
Jython — это реализация JVM языка программирования Python. Он предназначен для работы на платформе Java. Программа Jython может импортировать и использовать любой класс Java. Как и Java, программа Jython компилируется в байт-код . Одним из основных преимуществ является то, что пользовательский интерфейс, разработанный в Python, может использовать элементы графического интерфейса AWT , Swing или SWT Package .
Jython, который начинался как JPython, а затем был переименован, тесно следует стандартной реализации Python под названием CPython, созданной Гвидо Ван Россумом . Jython был создан в 1997 году Джимом Хугуниным . Jython 2.0 был выпущен в 1999 году. С тех пор релизы Jython 2.x соответствуют эквивалентным релизам CPython. Jython 2.7.0, выпущенный в мае 2015 года, соответствует CPython 2.7. Разработка Jython 3.x находится в стадии разработки.
Разница между Python и Java
Ниже приведены различия между Python и Java —
-
Python — это динамически типизированный язык. Следовательно, объявление типа переменной не требуется. Java, с другой стороны, является статически типизированным языком, что означает, что объявление типа переменной является обязательным и не может быть изменено.
-
В Python есть только непроверенные исключения, тогда как в Java есть как проверенные, так и непроверенные исключения.
-
Python использует отступы для области видимости, в то время как Java использует соответствующие фигурные скобки.
-
Поскольку Python является языком интерпретатора, он не имеет отдельных этапов компиляции. Однако Java-программа должна быть скомпилирована в байт-код и, в свою очередь, выполняется JVM.
-
Python поддерживает множественное наследование, но в Java множественное наследование невозможно. Тем не менее, он имеет реализацию интерфейса.
-
По сравнению с Java, Python имеет более богатые встроенные структуры данных (списки, диктанты, кортежи, все является объектом).
Python — это динамически типизированный язык. Следовательно, объявление типа переменной не требуется. Java, с другой стороны, является статически типизированным языком, что означает, что объявление типа переменной является обязательным и не может быть изменено.
В Python есть только непроверенные исключения, тогда как в Java есть как проверенные, так и непроверенные исключения.
Python использует отступы для области видимости, в то время как Java использует соответствующие фигурные скобки.
Поскольку Python является языком интерпретатора, он не имеет отдельных этапов компиляции. Однако Java-программа должна быть скомпилирована в байт-код и, в свою очередь, выполняется JVM.
Python поддерживает множественное наследование, но в Java множественное наследование невозможно. Тем не менее, он имеет реализацию интерфейса.
По сравнению с Java, Python имеет более богатые встроенные структуры данных (списки, диктанты, кортежи, все является объектом).
Разница между Python и Jython
Ниже приведены различия между Python и Jython —
-
Ссылочная реализация Python, называемая CPython, написана на языке Си. С другой стороны, Jython полностью написан на Java и является реализацией JVM.
-
Стандартный Python доступен на нескольких платформах. Jython доступен для любой платформы с установленной JVM.
-
Стандартный код Python компилируется в файл .pyc , а программа Jython компилируется в файл .class .
-
Расширения Python могут быть написаны на языке Си. Расширения для Jython написаны на Java.
-
Jython действительно многопоточный по своей природе. Однако Python для этой цели использует механизм Global Interpreter Lock (GIL).
-
Обе реализации имеют разные механизмы сборки мусора.
Ссылочная реализация Python, называемая CPython, написана на языке Си. С другой стороны, Jython полностью написан на Java и является реализацией JVM.
Стандартный Python доступен на нескольких платформах. Jython доступен для любой платформы с установленной JVM.
Стандартный код Python компилируется в файл .pyc , а программа Jython компилируется в файл .class .
Расширения Python могут быть написаны на языке Си. Расширения для Jython написаны на Java.
Jython действительно многопоточный по своей природе. Однако Python для этой цели использует механизм Global Interpreter Lock (GIL).
Обе реализации имеют разные механизмы сборки мусора.
В следующей главе мы узнаем, как импортировать библиотеки Java в Jython.
Jython — Установка
Перед установкой Jython 2.7 убедитесь, что в системе установлен JDK 7 или более. Jython доступен в виде исполняемого файла JAR. Загрузите его с http://www.jython.org/downloads.html и дважды щелкните его значок или выполните следующую команду:
java -jar jython_installer-2.7.0.jar
Мастер установки начнет с того, какие параметры установки должны быть предоставлены. Вот систематическая процедура установки.
Первый шаг в мастере просит вас выбрать язык.
Второй шаг предлагает вам принять лицензионное соглашение.
На следующем шаге выберите тип установки. Рекомендуется выбрать стандартную установку.
На следующем экране запрашивается подтверждение о ваших параметрах и продолжается выполнение установки.
Процедура установки может занять некоторое время.
После завершения установки запустите jython.exe из каталога bin внутри каталога назначения. Предполагая, что Jython установлен в C: \ jython27 , выполните следующую команду из командной строки.
C:\jython27\bin\jython
Появится приглашение Python (>>>), перед которым можно выполнить любой оператор Python или скрипт Python.
Jython — импорт библиотек Java
Одной из наиболее важных особенностей Jython является его способность импортировать классы Java в программе Python. Мы можем импортировать любой java-пакет или класс в Jython, так же, как мы делаем в Java-программе. В следующем примере показано, как пакеты java.util импортируются в сценарий Python (Jython) для объявления объекта класса Date.
from java.util import Date d = Date() print d
Сохраните и запустите приведенный выше код как UtilDate.py из командной строки. Экземпляр текущей даты и времени будет отображаться.
C:\jython27\bin>jython UtilDate.py Sun Jul 09 00:05:43 IST 2017
Следующие пакеты из библиотеки Java чаще импортируются в программу Jython, главным образом потому, что стандартная библиотека Python либо не имеет своих эквивалентов, либо не так хороша.
- сервлеты
- JMS
- J2EE
- Javadoc
- Swing считается превосходящим другие инструменты GUI
Любой пакет Java по этому вопросу может быть импортирован в сценарий Jython. Здесь следующая Java-программа хранится и компилируется в пакет с именем foo .
package foo; public class HelloWorld { public void hello() { System.out.println("Hello World!"); } public void hello(String name) { System.out.printf("Hello %s!", name); } }
Этот HelloWorld.class импортируется в следующем скрипте Jython. Методы в этом классе могут быть вызваны из сценария Jython importex.py .
from foo import HelloWorld h = HelloWorld() h.hello() h.hello("TutorialsPoint")
Сохраните и выполните приведенный выше скрипт из командной строки, чтобы получить следующий вывод.
C:\jython27\bin>jython importex.py Hello World! Hello TutorialsPoint!
Jython — переменные и типы данных
Переменные — это именованные местоположения в памяти компьютера. Каждая переменная может содержать один фрагмент данных. В отличие от Java, Python является динамически типизированным языком. Следовательно, при использовании Jython также; предварительное объявление типа данных переменной не производится. Вместо типа переменной, определяющей, какие данные в ней могут храниться, данные определяют тип переменной.
В следующем примере переменной присваивается целочисленное значение. Используя встроенную функцию type (), мы можем проверить, что тип переменной является целым числом. Но если одной и той же переменной присваивается строка, функция type () будет содержать строку как тип той же переменной.
> x = 10 >>> type(x) <class 'int'> >>> x = "hello" >>> type(x) <class 'str'>
Это объясняет, почему Python называется динамически типизированным языком.
Следующие встроенные типы данных Python также могут быть использованы в Jython —
- Число
- строка
- Список
- Кортеж
- толковый словарь
Python распознает числовые данные как число, которое может быть целым числом, действительным числом с плавающей запятой или комплексным числом. Типы данных String, List и Tuple называются последовательностями.
Номера Jython
В Python любое целое число со знаком называется типом int. Чтобы выразить длинное целое число, к нему прикреплена буква «L». Число с десятичной точкой, отделяющее целую часть от дробного, называется «плавающим». Дробная часть может содержать показатель степени, выраженный в научной нотации с использованием «E» или «e».
Комплексное число также определяется как числовой тип данных в Python. Комплексное число содержит действительную часть (число с плавающей запятой) и мнимую часть, к которой прикреплена буква «j».
Чтобы выразить число в восьмеричном или шестнадцатеричном представлении, к нему добавляется префикс 0O или 0X . Следующий блок кода дает примеры различных представлений чисел в Python.
int -> 10, 100, -786, 80 long -> 51924361L, -0112L, 47329487234L float -> 15.2, -21.9, 32.3+e18, -3.25E+101 complex -> 3.14j, 45.j, 3e+26J, 9.322e-36j
Jython Strings
Строка — это любая последовательность символов, заключенная в одинарные (например, «привет»), двойные (например, «привет») или тройные (например, «привет» или «« привет »») кавычки. Тройные кавычки особенно полезны, если содержимое строки занимает несколько строк.
Символы последовательности Escape могут быть дословно включены в строку с тройными кавычками. В следующих примерах показаны различные способы объявления строки в Python.
str = ’hello how are you?’ str = ”Hello how are you?” str = """this is a long string that is made up of several lines and non-printable characters such as TAB ( \t ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ \n ], or just a NEWLINE within the variable assignment will also show up. """
Третья строка при выводе даст следующий вывод.
this is a long string that is made up of several lines and non-printable characters such as TAB ( ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ ], or just a NEWLINE within the variable assignment will also show up.
Списки Jython
Список — это тип данных последовательности. Это набор элементов, разделенных запятыми, не обязательно одного типа, хранящихся в квадратных скобках. Доступ к отдельному элементу из списка можно получить с помощью нулевого индекса.
Следующий блок кода суммирует использование List в Python.
list1 = ['physics', 'chemistry', 1997, 2000]; list2 = [1, 2, 3, 4, 5, 6, 7 ]; print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5]
В следующей таблице описаны некоторые наиболее распространенные выражения Jython, связанные со списками Jython.
Выражение Jython | Описание |
---|---|
Len (Список) | длина |
Список [2] = 10 | Updation |
Del List [1] | делеция |
List.append (20) | присоединять |
List.insert (1,15) | вставка |
List.sort () | Сортировка |
Jython Tuples
Кортеж — это неизменяемая коллекция элементов данных, разделенных запятыми, которые хранятся в скобках. Невозможно удалить или изменить элемент в кортеже, а также невозможно добавить элемент в коллекцию кортежей. Следующий блок кода показывает операции кортежа.
tup1 = ('physics','chemistry‘,1997,2000); tup2 = (1, 2, 3, 4, 5, 6, 7 ); print "tup1[0]: ", tup1[0] print "tup2[1:5]: ", tup2[1:5]
Словарь Jython
Словарь Jython похож на класс Map в среде Java Collection. Это коллекция пар ключ-значение. Пары, разделенные запятой, заключены в фигурные скобки. Объект Dictionary не следует за индексом, начинающимся с нуля, для извлечения элементов внутри него, поскольку они хранятся с помощью техники хеширования.
Один и тот же ключ не может появляться более одного раза в объекте словаря. Однако более одного ключа могут иметь одинаковые связанные значения. Различные функции, доступные в объекте Dictionary, объяснены ниже —
dict = {'011':'New Delhi','022':'Mumbai','033':'Kolkata'} print "dict[‘011’]: ",dict['011'] print "dict['Age']: ", dict['Age']
В следующей таблице описаны некоторые из наиболее распространенных выражений Jython, связанных со словарем.
Выражение Jython | Описание |
---|---|
dict.get ( ‘011’) | Поиск |
Len (ДИКТ) | длина |
dict [‘044’] = ‘Ченнай’ | присоединять |
del dict [‘022’] | удалять |
dict.keys () | список ключей |
dict.values () | Список значений |
dict.clear () | Удаляет все элементы |
Jython — Использование типов коллекций Java
В дополнение к встроенным типам данных Python, Jython имеет преимущество использования классов коллекции Java путем импорта пакета java.util . Следующий код описывает классы, приведенные ниже —
- Java ArrayList объект с add ()
- Удалить()
- методы get () и set () класса ArrayList.
import java.util.ArrayList as ArrayList arr = ArrayList() arr.add(10) arr.add(20) print "ArrayList:",arr arr.remove(10) #remove 10 from arraylist arr.add(0,5) #add 5 at 0th index print "ArrayList:",arr print "element at index 1:",arr.get(1) #retrieve item at index 1 arr.set(0,100) #set item at 0th index to 100 print "ArrayList:",arr
Приведенный выше Jython-скрипт производит следующий вывод:
C:\jython27\bin>jython arrlist.py ArrayList: [10, 20] ArrayList: [5, 20] element at index 1: 20 ArrayList: [100, 20]
Джаррей Класс
Jython также реализует Jarray Object , который позволяет создавать массив Java в Python. Для работы с jarray просто определите тип последовательности в Jython и передайте его объекту jarray вместе с типом объекта, содержащегося в последовательности. Все значения внутри jarray должны быть одного типа.
В следующей таблице показаны типы символов, используемые с jarray.
Тип персонажа | Соответствующий тип Java |
---|---|
Z | логический |
С | голец |
В | байт |
ЧАС | короткая |
я | ИНТ |
L | долго |
F | поплавок |
D | двойной |
В следующем примере показано построение jarray.
my_seq = (1,2,3,4,5) from jarray import array arr1 = array(my_seq,'i') print arr1 myStr = "Hello Jython" arr2 = array(myStr,'c') print arr2
Здесь my_seq определяется как кортеж целых чисел. Он конвертируется в Jarray arr1. Второй пример показывает, что Jarray arr2 построен из последовательности строк mySttr . Вывод приведенного выше сценария jarray.py выглядит следующим образом:
array('i', [1, 2, 3, 4, 5]) array('c', 'Hello Jython')
Jython — контроль принятия решений
Структуры принятия решений имеют одно или несколько условий, которые должны быть оценены или протестированы программой, а также оператор или операторы, которые должны быть выполнены, если условие определено как истинное, и, необязательно, другие операторы, которые должны быть выполнены, если условие определяется как ложный.
На следующем рисунке показана общая форма типичной структуры принятия решений, встречающейся в большинстве языков программирования.
Jython не использует фигурные скобки для обозначения блоков операторов, которые должны выполняться, когда условие истинно или ложно (как в случае с Java). Вместо этого равномерный отступ (пробел от левого поля) используется для формирования блока операторов. Такой равномерно отступающий блок делает условный код выполненным, когда условие, указанное в операторе if, истинно.
Подобный блок может присутствовать после необязательного оператора else. Jython также предоставляет оператор elif, с помощью которого можно тестировать последовательные условия. Здесь предложение else появится последним и будет выполнено только в случае сбоя всех предыдущих условий. Общий синтаксис использования if..elif..else следующий.
if expression1: statement(s) elif expression2: statement(s) elif expression3: statement(s) else: statement(s)
В следующем примере конструкция if ..elif ..else используется для расчета скидки на различные значения, введенные пользователем.
discount = 0 amount = input("enter Amount") if amount>1000: discount = amount*0.10 elif amount>500: discount = amount*0.05 else: discount = 0 print 'Discount = ',discount print 'Net amount = ',amount-discount
Вывод вышеуказанного кода будет таким, как показано ниже.
enter Amount1500 Discount = 150.0 Net amount = 1350.0 enter Amount600 Discount = 30.0 Net amount = 570.0 enter Amount200 Discount = 0 Net amount = 200
Jython — Петли
Как правило, операторы в программе выполняются последовательно: первый оператор в функции выполняется первым, затем второй и так далее. Может возникнуть ситуация, когда вам нужно выполнить блок кода несколько раз. Утверждения, которые обеспечивают такую возможность повторения, называются операторами зацикливания .
В Jython цикл может быть сформирован двумя операторами:
-
В то время как заявление и
-
Для заявления
В то время как заявление и
Для заявления
WHILE Loop
Оператор while в Jython похож на оператор в Java. Он многократно выполняет блок операторов, пока данное условие выполняется. Следующая блок-схема описывает поведение цикла while.
Общий синтаксис оператора while приведен ниже.
while expression: statement(s)
Следующий код Jython использует цикл while для многократного увеличения и вывода значения переменной, пока оно не станет меньше нуля.
count = 0 while count<10: count = count+1 print "count = ",count print "Good Bye!"
Вывод . Вывод будет следующим.
count = 1 count = 2 count = 3 count = 4 count = 5 count = 6 count = 7 count = 8 count = 9 count = 10 Good Bye!
Цикл FOR
Цикл FOR в Jython не является счетным циклом, как в Java. Вместо этого он имеет возможность проходить элементы в типе данных последовательности, таком как строка, список или кортеж. Общий синтаксис оператора FOR в Jython показан ниже:
for iterating_var in sequence: statements(s)
Мы можем отобразить каждый символ в строке, а также каждый элемент в списке или кортеже, используя оператор FOR, как показано ниже —
#each letter in string for letter in 'Python': print 'Current Letter :', letter
Вывод . Вывод будет следующим.
Current Letter : P Current Letter : y Current Letter : t Current Letter : h Current Letter : o Current Letter : n
Давайте рассмотрим другой случай следующим образом.
#each item in list libs = [‘PyQt’, 'WxPython', 'Tkinter'] for lib in libs: # Second Example print 'Current library :', lib
Вывод — вывод будет следующим.
Current library : PyQt Current library : WxPython Current library : Tkinter
Вот еще один пример для рассмотрения.
#each item in tuple libs = (‘PyQt’, 'WxPython', 'Tkinter') for lib in libs: # Second Example print 'Current library :', lib
Вывод . Вывод вышеуказанной программы следующий.
Current library : PyQt Current library : WxPython Current library : Tkinter
В Jython оператор for также используется для перебора списка чисел, сгенерированных функцией range (). Функция range () принимает следующую форму:
range[([start],stop,[step])
Параметры start и step по умолчанию равны 0 и 1. Последнее сгенерированное число — шаг остановки. Оператор FOR пересекает список, образованный функцией range () . Например —
for num in range(5): print num
Он производит следующий вывод —
0 1 2 3 4
Jython — Функции
Сложная логика программирования разбита на один или несколько независимых и повторно используемых блоков операторов, называемых функциями. Стандартная библиотека Python содержит большое количество встроенных функций. Можно также определить их собственную функцию, используя ключевое слово def . Пользовательское имя функции сопровождается блоком операторов, который формирует ее тело, которое заканчивается оператором return.
После определения его можно вызывать из любой среды любое количество раз. Давайте рассмотрим следующий код, чтобы прояснить ситуацию.
#definition of function defSayHello(): "optional documentation string" print "Hello World" return #calling the function SayHello()
Функция может быть разработана для получения одного или нескольких параметров / аргументов из вызывающей среды. При вызове такой параметризованной функции необходимо предоставить одинаковое количество параметров с аналогичными типами данных, используемыми в определении функции, в противном случае интерпретатор Jython генерирует исключение TypeError .
пример
#defining function with two arguments def area(l,b): area = l*b print "area = ",area return #calling function length = 10 breadth = 20 #with two arguments. This is OK area(length, breadth) #only one argument provided. This will throw TypeError area(length)
Выход будет следующим:
area = 200 Traceback (most recent call last): File "area.py", line 11, in <module> area(length) TypeError: area() takes exactly 2 arguments (1 given)
После выполнения определенных в нем шагов вызываемая функция возвращается в вызывающую среду. Он может возвращать данные, если перед определением ключевого слова в определении функции указано выражение.
#defining function def area(l,b): area = l*b print "area = ",area return area #calling function length = 10 breadth = 20 #calling function and obtaining its reurned value result = area(length, breadth) print "value returned by function : ", result
Следующий вывод получается, если приведенный выше скрипт выполняется из приглашения Jython.
area = 200 value returned by function : 200
Jython — Модули
Модуль — это Jython-скрипт, в котором определены одна или несколько связанных функций, классов или переменных. Это позволяет логически организовать код Jython. Элементы Program, определенные в модуле, можно использовать в другом скрипте Jython, импортировав из него либо модуль, либо определенный элемент (функцию / класс).
В следующем коде (hello.py) определена функция SayHello () .
#definition of function defSayHello(str): print "Hello ", str return
Чтобы использовать функцию SayHello () из другого скрипта, импортируйте в нее модуль hello.py .
import hello hello.SayHello("TutorialsPoint")
Однако при этом будут импортированы все функции, определенные в модуле. Чтобы импортировать конкретную функцию из модуля, используйте следующий синтаксис.
from modname import name1[, name2[,... nameN]
Например, чтобы импортировать только функцию SayHello (), измените приведенный выше скрипт следующим образом.
from hello import SayHello SayHello("TutorialsPoint")
При вызове функции не нужно добавлять префикс имени модуля.
Jython — Пакет
Любая папка, содержащая один или несколько модулей Jython, распознается как пакет. Тем не менее, он должен иметь специальный файл с именем __init__.py , который предоставляет индекс используемых функций.
Давайте теперь разберемся, как создать и импортировать пакет.
Шаг 1 — Создайте папку с именем package1 , затем создайте и сохраните в ней следующие g модулей.
#fact.py def factorial(n): f = 1 for x in range(1,n+1): f = f*x return f
#sum.py def add(x,y): s = x+y return s
#mult.py def multiply(x,y): s = x*y return s
Шаг 2 — В папке package1 создайте и сохраните файл __init__.py со следующим содержимым.
#__init__.py from fact import factorial from sum import add from mult import multiply
Шаг 3 — Создайте следующий скрипт Jython вне папки package1 как test.py.
# Import your Package. import package1 f = package1.factorial(5) print "factorial = ",f s = package1.add(10,20) print "addition = ",s m = package1.multiply(10,20) print "multiplication = ",m
Шаг 4 — Запустите test.py из приглашения Jython. Будет получен следующий вывод.
factorial = 120 addition = 30 multiplication = 200
Jython — Java-приложение
Загрузите jython-standalone-2.7.0.jar — для встраивания Jython в приложения Java с их официальной страницы загрузок: http://www.jython.org/downloads.html и включите этот файл jar в переменную среды Java CLASSPATH.
Эта библиотека содержит класс PythonInterpreter . Используя объект этого класса, любой скрипт Python может быть выполнен с использованием метода execfile () . PythonInterpreter позволяет вам использовать PyObjects напрямую. Все объекты, известные системе времени исполнения Jython, представлены экземпляром класса PyObject или одним из его подклассов.
Класс PythonInterpreter имеет несколько регулярно используемых методов, которые описаны в таблице ниже.
Sr.No. | Метод и описание |
---|---|
1 |
setIn (PyObject) Установите объект Python для использования для стандартного потока ввода |
2 |
setIn (java.io.Reader) Установите java.io.Reader для использования в качестве стандартного потока ввода |
3 |
setIn (java.io.InputStream) Установите java.io.InputStream, чтобы использовать для стандартного потока ввода |
4 |
накрытый стол (PyObject) Установите объект Python для использования в стандартном потоке вывода |
5 |
накрытый стол (java.io.Writer) Установите java.io.Writer, чтобы использовать для стандартного потока вывода |
6 |
накрытый стол (Java, io.OutputStream) Установите java.io.OutputStream, чтобы использовать для стандартного потока вывода |
7 |
setErr (PyObject) Установите объект ошибки Python для использования в стандартном потоке ошибок |
8 |
setErr (java.io.Writer Установите java.io.Writer, чтобы использовать для стандартного потока ошибок |
9 |
setErr (java.io.OutputStream) Установите java.io.OutputStream, чтобы использовать для стандартного потока ошибок |
10 |
Eval (String) Оцените строку как источник Python и верните результат |
11 |
Eval (PyObject) Оценить объект кода Python и вернуть результат |
12 |
Exec (String) Выполнить исходную строку Python в локальном пространстве имен |
13 |
Exec (PyObject) Выполнить объект кода Python в локальном пространстве имен |
14 |
execfile (строковое имя файла) Выполнить файл исходного кода Python в локальном пространстве имен |
15 |
ExecFile (java.io.InputStream) Выполнить входной поток источника Python в локальном пространстве имен |
16 |
компиляции (String) Скомпилируйте исходную строку Python как выражение или модуль |
17 |
компилировать (скрипт, имя файла) Скомпилируйте скрипт из исходного кода Python как выражение или модуль |
18 |
set (имя строки, значение объекта) Установите переменную типа объекта в локальном пространстве имен |
19 |
set (имя строки, значение PyObject) Установите переменную типа PyObject в локальном пространстве имен |
20 |
получить (String) Получить значение переменной в локальном пространстве имен |
21 |
получить (строковое имя, класс Получить значение переменной в локальном пространстве имен. Значение будет возвращено как экземпляр данного Java-класса. |
setIn (PyObject)
Установите объект Python для использования для стандартного потока ввода
setIn (java.io.Reader)
Установите java.io.Reader для использования в качестве стандартного потока ввода
setIn (java.io.InputStream)
Установите java.io.InputStream, чтобы использовать для стандартного потока ввода
накрытый стол (PyObject)
Установите объект Python для использования в стандартном потоке вывода
накрытый стол (java.io.Writer)
Установите java.io.Writer, чтобы использовать для стандартного потока вывода
накрытый стол (Java, io.OutputStream)
Установите java.io.OutputStream, чтобы использовать для стандартного потока вывода
setErr (PyObject)
Установите объект ошибки Python для использования в стандартном потоке ошибок
setErr (java.io.Writer
Установите java.io.Writer, чтобы использовать для стандартного потока ошибок
setErr (java.io.OutputStream)
Установите java.io.OutputStream, чтобы использовать для стандартного потока ошибок
Eval (String)
Оцените строку как источник Python и верните результат
Eval (PyObject)
Оценить объект кода Python и вернуть результат
Exec (String)
Выполнить исходную строку Python в локальном пространстве имен
Exec (PyObject)
Выполнить объект кода Python в локальном пространстве имен
execfile (строковое имя файла)
Выполнить файл исходного кода Python в локальном пространстве имен
ExecFile (java.io.InputStream)
Выполнить входной поток источника Python в локальном пространстве имен
компиляции (String)
Скомпилируйте исходную строку Python как выражение или модуль
компилировать (скрипт, имя файла)
Скомпилируйте скрипт из исходного кода Python как выражение или модуль
set (имя строки, значение объекта)
Установите переменную типа объекта в локальном пространстве имен
set (имя строки, значение PyObject)
Установите переменную типа PyObject в локальном пространстве имен
получить (String)
Получить значение переменной в локальном пространстве имен
получить (строковое имя, класс
Получить значение переменной в локальном пространстве имен. Значение будет возвращено как экземпляр данного Java-класса.
Следующий блок кода представляет собой Java-программу, имеющую встроенный Jython-скрипт «hello.py» .usingexecfile () метода объекта PythonInterpreter. Также показано, как можно установить или прочитать переменную Python с помощью методов set () и get ().
import org.python.util.PythonInterpreter; import org.python.core.*; public class SimpleEmbedded { public static void main(String []args) throws PyException { PythonInterpreter interp = new PythonInterpreter(); System.out.println("Hello, world from Java"); interp.execfile("hello.py"); interp.set("a", new PyInteger(42)); interp.exec("print a"); interp.exec("x = 2+2"); PyObject x = interp.get("x"); System.out.println("x: "+x); System.out.println("Goodbye "); } }
Скомпилируйте и запустите вышеупомянутую Java-программу, чтобы получить следующий вывод.
Hello, world from Java hello world from Python 42 x: 4 Goodbye
Jython — Eclipse Plugin
PyDev — это плагин с открытым исходным кодом для Eclipse IDE, позволяющий разрабатывать проекты на Python, Jython, а также IronPython. Он размещен на сайте https://pydev.org . Пошаговая процедура установки плагина PyDev в Eclipse IDE приведена ниже.
Шаг 1 — Откройте Eclipse IDE и выберите пункт « Установить новое программное обеспечение» в меню «Справка».
Шаг 2 — введите http://pydev.org/updates в текстовое поле перед началом работы с меткой и нажмите кнопку «Добавить». Выберите все доступные записи в списке и нажмите «Далее». Мастеру потребуется несколько минут для завершения установки, и он предложит перезапустить IDE.
Шаг 3 — Теперь выберите параметр предпочтений в меню «Окно». Откроется диалоговое окно настроек, как показано ниже.
Шаг 4 — Разверните узел Интерпретаторы и выберите Интерпретатор Jython на левой панели. На правой панели нажмите new, чтобы указать путь к файлу jython.jar .
Теперь мы готовы начать проект Jython с использованием Eclipse.
Jython — проект в Eclipse
Чтобы сделать проект в затмении, мы должны выполнить шаги, приведенные ниже.
Шаг 1 — Выберите файл? Новый? Проект. Выберите PyDev из диалогового окна фильтра. Укажите название проекта, тип проекта и нажмите «Готово».
Шаг 2 — Привет проект теперь появится в проводнике проекта слева. Щелкните правой кнопкой мыши, чтобы добавить в нее hello.py.
Шаг 3 — Пустой hello.py появится в редакторе. Напишите код Jython и сохраните.
Шаг 4 — Нажмите на кнопку Run в строке меню. Вывод появится в окне консоли, как показано ниже.
Jython — плагин и проект NetBeans
Поддержка Python и Jython для NetBeans доступна через плагин nbPython . Загрузите плагин со следующего URL — http://plugins.netbeans.org/plugin/56795 . Распакуйте загруженный архив в какую-то папку. Например — d: \ nbplugin . Чтобы установить плагин NetBeans, выполните следующие действия.
Шаг 1 — Запустите IDE Netbeans, а затем перейдите в Инструменты / Плагин, чтобы открыть Менеджер плагинов. Выберите вкладку «Загруженные» и перейдите в папку, в которую загруженный файл был распакован. Откроется окно NetBeans, как показано ниже.
Шаг 2 — Следующий шаг — выбрать все файлы .nbm и нажать «Открыть».
Шаг 3 — Нажмите на кнопку Установить.
Шаг 4 — Примите следующее лицензионное соглашение, чтобы продолжить.
Проигнорируйте предупреждение о ненадежном источнике плагинов и перезапустите IDE, чтобы продолжить.
Проект Jython в NetBeans
После перезапуска запустите новый проект, выбрав File / New. Категория Python теперь будет доступна в списке категорий. Выберите это, чтобы продолжить.
Если в системе установлен Python, его версия / версии будут автоматически обнаружены и показаны в раскрывающемся списке платформы Python. Тем не менее, Jython не будет указан. Нажмите на кнопку «Управление», чтобы добавить его.
Нажмите кнопку «Создать», чтобы добавить имя платформы и путь к исполняемому файлу Jython.
Jython теперь будет доступен в списке платформ. Выберите из выпадающего списка, как показано на следующем снимке экрана.
Теперь мы можем заполнить имя проекта, местоположение и основной файл в следующем окне.
Структура проекта появится в окне проектов среды IDE NetBeans, а шаблон кода Python — в окне редактора.
Создайте и выполните проект Jython, чтобы получить следующий результат в окне вывода IDE NetBeans.
Jython — Сервлеты
Java-сервлет является наиболее широко используемой техникой веб-разработки. Мы можем использовать Jython для написания сервлетов, и это добавляет гораздо больше преимуществ помимо того, что может предложить Java, потому что теперь мы можем также использовать возможности языка Python.
Мы будем использовать IDE NetBeans для разработки веб-приложения Java с сервлетом Jython. Убедитесь, что плагин nbPython установлен в установке NetBeans. Запустите новый проект для создания веб-приложения, выбрав следующий путь — Файл → Новый проект → Java web → Новое веб-приложение .
Укажите название проекта и местоположение. В среде IDE будет создана структура папок проекта. Добавьте файл сервлета Java (ServletTest.java) под узлом исходных пакетов в окне «Проекты». Это добавит servlet-api.jar в папку lib проекта. Также позвольте IDE создать файл дескриптора web.xml. Добавьте следующий код в ServletTest.java .
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletTest extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType ("text/html"); PrintWriter toClient = response.getWriter(); toClient.println ( "<html> <head> <title>Servlet Test</title>" + " </head> <body> <h1>Servlet Test</h1> </body> </html>" ); } }
Файл web.xml, созданный NetBeans, будет выглядеть так, как показано ниже:
<web-app> <servlet> <servlet-name>ServletTest</servlet-name> <servlet-class>ServletTest</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletTest</servlet-name> <url-pattern>/ServletTest</url-pattern> </servlet-mapping> </web-app>
Создайте и запустите проект, чтобы получить текстовый тест сервлета, отображаемый в теге <h1> в окне браузера. Таким образом, мы добавили в приложение обычный Java-сервлет.
Теперь мы добавим сервлет Jython. Сервлеты Jython работают с помощью промежуточного сервлета Java, также известного как PyServlet. PyServlet.class присутствует в jython standalone.jar . Добавьте его в папку WEB-INF / lib .
Следующим шагом является настройка файла web.xml для вызова PyServlet при каждом запросе любого файла * .py . Это должно быть сделано путем добавления следующего XML-кода.
<servlet> <servlet-name>PyServlet</servlet-name> <servlet-class>org.python.util.PyServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>PyServlet</servlet-name> <url-pattern>*.py</url-pattern> </servlet-mapping>
Полный код web.xml будет выглядеть так, как показано ниже.
<web-app> <servlet> <servlet-name>ServletTest</servlet-name> <servlet-class>ServletTest</servlet-class> </servlet> <servlet> <servlet-name>PyServlet</servlet-name> <servlet-class>org.python.util.PyServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ServletTest</servlet-name> <url-pattern>/ServletTest</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>PyServlet</servlet-name> <url-pattern>*.py</url-pattern> </servlet-mapping> </web-app>
Поместите следующий код Jython в папку WEB-INF внутри папки проекта как JythonServlet.py, что эквивалентно предыдущему ServletTest.java.
from javax.servlet.http import HttpServlet class JythonServlet1 (HttpServlet): def doGet(self,request,response): self.doPost (request,response) def doPost(self,request,response): toClient = response.getWriter() response.setContentType ("text/html") toClient.println ( "<html> <head> <title>Servlet Test</title>" + " </head> <body> <h1>Servlet Test</h1> </body> </html>" )
Создайте проект и в браузере откройте следующий URL —
HTTP: // локальный: 8080 / jythonwebapp / jythonservlet.py
Браузер покажет тест сервлета в теге <h1>, как в случае вывода сервлета Java.
Jython — JDBC
Jython использует пакет zxJDBC, который предоставляет простую в использовании оболочку Python для JDBC. zxJDBC соединяет два стандарта: JDBC — это стандартная платформа для доступа к базе данных в Java, а DBI — это стандартный API-интерфейс для приложений Python.
ZxJDBC предоставляет совместимый со стандартом DBI 2.0 интерфейс для JDBC. Для JDBC доступно более 200 драйверов, и все они работают с zxJDBC. Высокопроизводительные драйверы доступны для всех основных реляционных баз данных, включая:
- DB2
- дерби
- MySQL
- оракул
- PostgreSQL
- SQLite
- SQL Server и
- Sybase.
Пакет ZxJDBC можно скачать с https://sourceforge.net/projects/zxjdbc/ или http://www.ziclix.com/zxjdbc/ . Загруженный архив содержит файл ZxJDBC.jar, который следует добавить в переменную среды CLASSPATH.
Мы намерены установить связь с базой данных MySQL. Для этого требуется драйвер JDBC для MySQL. Загрузите соединитель MySQL J по следующей ссылке — https://dev.mysql.com/downloads/connector/j/ и включите соединитель mysql java-5.1.42-bin.jar в CLASSPATH.
Войдите на сервер MySQL и создайте таблицу учеников в тестовой базе данных со следующей структурой:
поле | Тип | ширина |
---|---|---|
название | Varchar | 10 |
Возраст | Int | 3 |
Метки | Int | 3 |
Добавьте в него несколько записей.
название | Возраст | Метки |
---|---|---|
Ravi | 21 | 78 |
Ashok | 20 | 65 |
индиго | 22 | 71 |
Создайте следующий скрипт Jython как dbconnect.py .
url = "jdbc:mysql://localhost/test" user = "root" password = "password" driver = "com.mysql.jdbc.Driver" mysqlConn = zxJDBC.connect(url, user, password, driver) mysqlConn = con.cursor() mysqlConn.execute(“select * from student) for a in mysql.fetchall(): print a
Выполните приведенный выше скрипт из приглашения Jython. Записи в таблице учеников будут перечислены, как показано ниже —
(“Ravi”, 21, 78) (“Ashok”, 20, 65) (“Anil”,22,71)
Это объясняет процедуру создания JDBC в Jython.
Jython — Использование библиотеки Swing GUI
Одной из основных особенностей Jython является его способность использовать библиотеку Swing GUI в JDK. Стандартный дистрибутив Python (часто называемый CPython) поставляется с библиотекой графического интерфейса пользователя Tkinter . Другие библиотеки GUI, такие как PyQt и WxPython , также доступны для использования с ним, но библиотека Swing предлагает независимый от платформы инструментарий GUI.
Использование библиотеки свинга в Jython намного проще по сравнению с использованием в Java. В Java анонимные классы должны использоваться для создания привязки событий. В Jython мы можем просто передать функцию для той же цели.
Основное окно верхнего уровня создается путем объявления объекта класса JFrame и установки его свойства visible в значение true. Для этого необходимо импортировать класс Jframe из пакета swing.
from javax.swing import JFrame
Класс JFrame имеет несколько конструкторов с различным количеством аргументов. Мы будем использовать тот, который принимает строку в качестве аргумента и устанавливает ее в качестве заголовка.
frame = JFrame(“Hello”)
Установите размер и расположение фрейма перед установкой его свойства visible в значение true. Сохраните следующий код как frame.py .
from javax.swing import JFrame frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(300,200) frame.setVisible(True)
Запустите приведенный выше скрипт из командной строки. Он отобразит следующий вывод, показывающий окно.
Свинг-библиотека GUI предоставляется в виде пакета javax.swing на Java. Его основные контейнерные классы, JFrame и JDialog , соответственно получены из классов Frame и Dialog, которые находятся в библиотеке AWT. Другие элементы управления GUI, такие как JLabel, JButton, JTextField и т. Д., Являются производными от класса JComponent.
На следующем рисунке показана иерархия Swing Package Class.
Следующая таблица суммирует различные классы управления GUI в библиотеке колебания —
Sr.No. | Класс и описание |
---|---|
1 |
JLabel Объект JLabel — это компонент для размещения текста в контейнере. |
2 |
JButton Этот класс создает помеченную кнопку. |
3 |
JColorChooser JColorChooser предоставляет панель управления, разработанную, чтобы позволить пользователю манипулировать и выбирать цвет. |
4 |
JCheckBox JCheckBox — это графический компонент, который может находиться во включенном (true) или выключенном (false) состоянии. |
5 |
JRadioButton Класс JRadioButton — это графический компонент, который может находиться либо во включенном (истинном), либо в выключенном (ложном) состоянии. в группе. |
6 |
JList Компонент JList предоставляет пользователю список прокручиваемых текстовых элементов. |
7 |
JComboBox Компонент JComboBox предоставляет пользователю выпадающий список элементов |
8 |
JTextField Объект JTextField — это текстовый компонент, который позволяет редактировать одну строку текста. |
9 |
JPasswordField Объект JPasswordField — это текстовый компонент, предназначенный для ввода пароля. |
10 |
JTextArea Объект JTextArea — это текстовый компонент, который позволяет редактировать несколько строк текста. |
11 |
ImageIcon Элемент управления ImageIcon — это реализация интерфейса Icon, который рисует значки из изображений |
12 |
JScrollBar Элемент управления «Полоса прокрутки» представляет компонент полосы прокрутки, чтобы пользователь мог выбирать из диапазона значений. |
13 |
JOptionPane JOptionPane предоставляет набор стандартных диалоговых окон, которые запрашивают у пользователей значение или информируют их о чем-то. |
14 |
JFileChooser Элемент управления JFileChooser представляет диалоговое окно, из которого пользователь может выбрать файл. |
15 |
JProgressBar По мере продвижения задачи к завершению на индикаторе выполнения отображается процент выполнения задачи. |
16 |
JSlider JSlider позволяет пользователю графически выбирать значение, перемещая ручку в ограниченном интервале. |
17 |
JSpinner JSpinner представляет собой однострочное поле ввода, которое позволяет пользователю выбрать число или значение объекта из упорядоченной последовательности. |
JLabel
Объект JLabel — это компонент для размещения текста в контейнере.
JButton
Этот класс создает помеченную кнопку.
JColorChooser
JColorChooser предоставляет панель управления, разработанную, чтобы позволить пользователю манипулировать и выбирать цвет.
JCheckBox
JCheckBox — это графический компонент, который может находиться во включенном (true) или выключенном (false) состоянии.
JRadioButton
Класс JRadioButton — это графический компонент, который может находиться либо во включенном (истинном), либо в выключенном (ложном) состоянии. в группе.
JList
Компонент JList предоставляет пользователю список прокручиваемых текстовых элементов.
JComboBox
Компонент JComboBox предоставляет пользователю выпадающий список элементов
JTextField
Объект JTextField — это текстовый компонент, который позволяет редактировать одну строку текста.
JPasswordField
Объект JPasswordField — это текстовый компонент, предназначенный для ввода пароля.
JTextArea
Объект JTextArea — это текстовый компонент, который позволяет редактировать несколько строк текста.
ImageIcon
Элемент управления ImageIcon — это реализация интерфейса Icon, который рисует значки из изображений
JScrollBar
Элемент управления «Полоса прокрутки» представляет компонент полосы прокрутки, чтобы пользователь мог выбирать из диапазона значений.
JOptionPane
JOptionPane предоставляет набор стандартных диалоговых окон, которые запрашивают у пользователей значение или информируют их о чем-то.
JFileChooser
Элемент управления JFileChooser представляет диалоговое окно, из которого пользователь может выбрать файл.
JProgressBar
По мере продвижения задачи к завершению на индикаторе выполнения отображается процент выполнения задачи.
JSlider
JSlider позволяет пользователю графически выбирать значение, перемещая ручку в ограниченном интервале.
JSpinner
JSpinner представляет собой однострочное поле ввода, которое позволяет пользователю выбрать число или значение объекта из упорядоченной последовательности.
Мы будем использовать некоторые из этих элементов управления в последующих примерах.
Jython — Управление раскладкой
Менеджеры макетов в Java — это классы, которые управляют размещением элементов управления в объектах-контейнерах, таких как Frame, Dialog или Panel . Менеджеры макетов поддерживают относительное расположение элементов управления в кадре, даже если изменяется разрешение или размер самого кадра.
Эти классы реализуют интерфейс Layout . Следующие менеджеры макетов определены в библиотеке AWT —
- BorderLayout
- FlowLayout
- Макет сетки
- CardLayout
- GridBagLayout
Следующие менеджеры макетов определены в библиотеке Swing —
- BoxLayout
- GroupLayout
- ScrollPaneLayout
- SpringLayout
Мы будем использовать менеджеры компоновки AWT, а также менеджеры компоновки свинга в следующих примерах.
- Абсолютная планировка
- Макет потока
- Макет сетки
- Макет границы
- Макет коробки
- Расположение группы
Давайте теперь обсудим каждый из них в деталях.
Абсолютная планировка
Прежде чем мы рассмотрим все вышеперечисленные менеджеры макетов, мы должны рассмотреть абсолютное расположение элементов управления в контейнере. Мы должны установить метод макета объекта фрейма на «Нет».
frame.setLayout(None)
Затем поместите элемент управления, вызвав метод setBounds () . Он принимает четыре аргумента — x position, y position, width и height.
Например — Поместить объект кнопки в абсолютную позицию и с абсолютным размером.
btn = JButton("Add") btn.setBounds(60,80,60,20)
Точно так же все элементы управления могут быть размещены путем правильного распределения позиции и размера. Этот макет относительно прост в использовании, но не сохраняет свой внешний вид при изменении размера окна или при выполнении программы при изменении разрешения экрана.
В следующем скрипте Jython три объекта Jlabel используются для отображения текста «phy», «maths» и «Total» соответственно. Перед этими тремя — объекты JTextField. Объект Button размещается над меткой «Итого».
Прежде всего, создается окно JFrame с нулевым макетом.
frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(300,200) frame.setLayout(None)
Затем добавляются различные элементы управления в соответствии с их абсолютным положением и размером. Полный код приведен ниже —
from javax.swing import JFrame, JLabel, JButton, JTextField frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(300,200) frame.setLayout(None) lbl1 = JLabel("Phy") lbl1.setBounds(60,20,40,20) txt1 = JTextField(10) txt1.setBounds(120,20,60,20) lbl2 = JLabel("Maths") lbl2.setBounds(60,50,40,20) txt2 = JTextField(10) txt2.setBounds(120, 50, 60,20) btn = JButton("Add") btn.setBounds(60,80,60,20) lbl3 = JLabel("Total") lbl3.setBounds(60,110,40,20) txt3 = JTextField(10) txt3.setBounds(120, 110, 60,20) frame.add(lbl1) frame.add(txt1) frame.add(lbl2) frame.add(txt2) frame.add(btn) frame.add(lbl3) frame.add(txt3) frame.setVisible(True)
Выход для вышеуказанного кода выглядит следующим образом.
Jython FlowLayout
FlowLayout является менеджером по умолчанию для контейнерных классов. Он организует управление слева направо, а затем сверху вниз.
В следующем примере объект Jlabel, объект JTextField и объект JButton должны отображаться в JFrame с помощью диспетчера FlowLayout. Для начала давайте импортируем необходимые классы из пакета javax.swing и пакета java.awt .
from javax.swing import JFrame, JLabel, JButton, JTextField from java.awt import FlowLayout
Затем создайте объект JFrame и установите его местоположение, а также свойства размера.
frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(200,200) Set the layout manager for the frame as FlowLayout. frame.setLayout(FlowLayout())
Теперь объявите объекты для классов JLabel, JTextfield и JButton.
label = JLabel("Welcome to Jython Swing") txt = JTextField(30) btn = JButton("ok")
Наконец, добавьте эти элементы управления во фрейм, вызвав метод add () класса JFrame.
frame.add(label) frame.add(txt) frame.add(btn)
Чтобы отобразить рамку, установите для ее свойства visible значение true. Полный Jython-скрипт и его вывод приведены ниже.
from javax.swing import JFrame, JLabel, JButton, JTextField from java.awt import FlowLayout frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(200,200) frame.setLayout(FlowLayout()) label = JLabel("Welcome to Jython Swing") txt = JTextField(30) btn = JButton("ok") frame.add(label) frame.add(txt) frame.add(btn) frame.setVisible(True)
Jython GridLayout
Менеджер Gridlayout позволяет размещать элементы управления в прямоугольной сетке. Один элемент управления размещен в каждой ячейке сетки.
В следующем примере GridLayout применяется к объекту JFrame, разделяя его на 4 строки и 4 столбца. Объект JButton должен быть размещен в каждой ячейке сетки.
Давайте сначала импортировать необходимые библиотеки —
from javax.swing import JFrame, JButton from java.awt import GridLayout
Затем создайте контейнер JFrame —
frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(400,400)
Теперь примените GridLayout, указав его размеры как 4 на 4.
frame.setLayout(GridLayout(4,4))
Теперь мы должны использовать два цикла FOR, каждый из которых идет от 1 до 4, поэтому шестнадцать объектов JButton помещаются в последующие ячейки.
k = 0 frame.setLayout(GridLayout(4,4)) for i in range(1,5): for j in range(1,5): k = k+1 frame.add(JButton(str(k)))
Наконец, установите видимость фрейма в true. Полный код Jython приведен ниже.
from javax.swing import JFrame, JButton from java.awt import GridLayout frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(400,400) frame.setLayout(GridLayout(4,4)) k = 0 for i in range(1,5): for j in range(1,5): k = k+1 frame.add(JButton(str(k))) frame.setVisible(True)
Вывод вышеуказанного кода выглядит следующим образом:
Jython BorderLayout
Менеджер BorderLayout делит контейнер на пять географических регионов и мест с одним компонентом в каждом регионе. Эти регионы представлены определенными константами следующим образом:
- BorderLayout.NORTH
- BorderLayout.SOUTH
- BorderLayout.EAST
- BorderLayout.WEST
- BorderLayout.CENTER
Давайте рассмотрим следующий пример —
Jython BoxLayout
Класс BoxLayout определяется в пакете javax.swing . Он используется для размещения компонентов в контейнере как вертикально, так и горизонтально. Направление определяется следующими константами —
- X_Axis
- Y_AXIS
- LINE_AXIS
- PAGE_AXIS
Целочисленная константа указывает ось, вдоль которой должны быть расположены компоненты контейнера. Когда контейнер имеет ориентацию компонентов по умолчанию, LINE_AXIS указывает, что компоненты должны быть расположены слева направо, а PAGE_AXIS указывает, что компоненты должны быть расположены сверху вниз.
В следующем примере панель (из класса JPanel) добавляется в объект JFrame. Вертикальный BoxLayout применяется к нему, и к нему добавляются еще две панели, верхняя и нижняя. Эти две внутренние панели имеют две кнопки, каждая из которых добавлена в горизонтальное расположение Boxlayout.
Давайте сначала создадим окно JFrame верхнего уровня.
frame = JFrame() frame.setTitle("Buttons") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setSize(300, 150)
Объявлен объект JPanel с вертикальным BoxLayout. Добавьте его в рамку верхнего уровня.
panel = JPanel() panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS)) frame.add(panel)
На этой панели добавлены еще две панели сверху и снизу. Каждый из них имеет два объекта JButton, добавленных к ним по горизонтали, с разделителем, разделяющим их на 25 пикселей.
###top panel top = JPanel() top.setLayout(BoxLayout(top, BoxLayout.X_AXIS)) b1 = JButton("OK") b2 = JButton("Close") top.add(Box.createVerticalGlue()) top.add(b1) top.add(Box.createRigidArea(Dimension(25, 0))) top.add(b2)
Аналогично строится нижняя панель.
###bottom panel bottom = JPanel() bottom.setLayout(BoxLayout(bottom, BoxLayout.X_AXIS)) b3 = JButton("Open") b4 = JButton("Save") bottom.add(b3) bottom.add(Box.createRigidArea(Dimension(25, 0))) bottom.add(b4) bottom.add(Box.createVerticalGlue())
Обратите внимание, что функция createRigidArea () используется для создания пространства в 25 пикселей между двумя кнопками. Также функция createVerticalGlue () занимает начальное или конечное пространство в макете.
Для начала добавьте верхнюю и нижнюю панели и установите для свойства видимости фрейма значение true. Полный код выглядит следующим образом —
from java.awt import Dimension from javax.swing import JButton, JFrame,JPanel,BoxLayout,Box frame = JFrame() frame.setTitle("Buttons") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setSize(300, 150) panel = JPanel() panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS)) frame.add(panel) ###top panel top = JPanel() top.setLayout(BoxLayout(top, BoxLayout.X_AXIS)) b1 = JButton("OK") b2 = JButton("Close") top.add(Box.createVerticalGlue()) top.add(b1) top.add(Box.createRigidArea(Dimension(25, 0))) top.add(b2) ###bottom panel bottom = JPanel() bottom.setLayout(BoxLayout(bottom, BoxLayout.X_AXIS)) b3 = JButton("Open") b4 = JButton("Save") bottom.add(b3) bottom.add(Box.createRigidArea(Dimension(25, 0))) bottom.add(b4) bottom.add(Box.createVerticalGlue()) panel.add(bottom) panel.add(top) frame.setVisible(True)
Приведенный выше код сгенерирует следующий вывод.
Jython GroupLayout
Менеджер GroupLayout группирует компоненты в иерархическом порядке. Группировка выполняется двумя классами, SequentialGroup и ParallelGroup , оба реализуют интерфейс группы в Java.
Процедура макета делится на два этапа. В одном шаге компоненты размещаются вдоль горизонтальной оси, а во втором вдоль вертикальной оси. Каждый компонент должен быть определен дважды в макете.
Существует два типа аранжировок: последовательная и параллельная. В обоих случаях мы можем расположить компоненты последовательно или параллельно. В горизонтальном расположении строка называется последовательной группой, а столбец — параллельной группой. С другой стороны, при параллельном расположении строка элемента представляет собой параллельную группу и столбец, который называется последовательным.
В следующем примере пять кнопок расположены таким образом, что по три появляются в строке и столбце. Для начала добавьте объект Jpanel в окно JFrame и установите его макет как Grouplayout.
frame = JFrame() panel = JPanel() frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) layout = GroupLayout(panel) panel.setLayout(layout)
Затем создайте объекты JButton —
buttonD = JButton("D") buttonR = JButton("R") buttonY = JButton("Y") buttonO = JButton("O") buttonT = JButton("T")
Затем мы создаем SequentialGroup с именем LeftToRight, в которую добавляются buttonD и buttonY. Между ними располагается ParallelGroup ColumnMiddle (с тремя другими кнопками, добавленными вертикально).
leftToRight = layout.createSequentialGroup() leftToRight.addComponent(buttonD) columnMiddle = layout.createParallelGroup() columnMiddle.addComponent(buttonR) columnMiddle.addComponent(buttonO) columnMiddle.addComponent(buttonT) leftToRight.addGroup(columnMiddle) leftToRight.addComponent(buttonY)
Теперь пришло определение вертикальной SequentialGroup под названием TopToBottom. Добавьте строку ParallelGroup из трех кнопок, а затем расположите две кнопки вертикально.
topToBottom = layout.createSequentialGroup() rowTop = layout.createParallelGroup() rowTop.addComponent(buttonD) rowTop.addComponent(buttonR) rowTop.addComponent(buttonY) topToBottom.addGroup(rowTop) topToBottom.addComponent(buttonO) topToBottom.addComponent(buttonT)
Наконец, установите группу LeftToRight по горизонтали и группу TopToBottom по вертикали для объекта макета. Полный код приведен ниже —
from javax.swing import JButton, JFrame,JPanel,GroupLayout frame = JFrame() panel = JPanel() frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) layout = GroupLayout(panel) panel.setLayout(layout) buttonD = JButton("D") buttonR = JButton("R") buttonY = JButton("Y") buttonO = JButton("O") buttonT = JButton("T") leftToRight = layout.createSequentialGroup() leftToRight.addComponent(buttonD) columnMiddle = layout.createParallelGroup() columnMiddle.addComponent(buttonR) columnMiddle.addComponent(buttonO) columnMiddle.addComponent(buttonT) leftToRight.addGroup(columnMiddle) leftToRight.addComponent(buttonY) topToBottom = layout.createSequentialGroup() rowTop = layout.createParallelGroup() rowTop.addComponent(buttonD) rowTop.addComponent(buttonR) rowTop.addComponent(buttonY) topToBottom.addGroup(rowTop) topToBottom.addComponent(buttonO) topToBottom.addComponent(buttonT) layout.setHorizontalGroup(leftToRight) layout.setVerticalGroup(topToBottom) frame.add(panel) frame.pack() frame.setVisible(True)
Вывод вышеуказанного кода выглядит следующим образом:
Jython — обработка событий
Для обработки событий в Java swing требуется, чтобы элемент управления (например, JButton, JList и т. Д.) Был зарегистрирован соответствующим слушателем событий. Интерфейс прослушивателя событий или соответствующий класс Adapter должен быть реализован или переклассифицирован с переопределенным методом обработки событий. В Jython обработка событий очень проста. Мы можем передать любую функцию как свойство функции обработки события, соответствующей элементу управления.
Давайте сначала посмотрим, как обрабатывается событие click в Java.
Для начала нам нужно импортировать пакет java.awt.event . Затем расширяющий класс JFrame должен реализовывать интерфейс ActionListener.
public class btnclick extends JFrame implements ActionListener
Затем мы должны объявить объект JButton, добавить его в ContentPane фрейма и затем зарегистрировать его в ActionListener методом addActionListener ().
JButton b1 = new JButton("Click here"); getContentPane().add(b1); b1.addActionListener(this);
Теперь метод actionPerformed () интерфейса ActionListener должен быть переопределен для обработки ActionEvent.
Ниже приводится весь код Java —
import java.awt.event.*; import javax.swing.*; public class btnclick extends JFrame implements ActionListener { btnclick() { JButton b1 = new JButton("Click here"); getContentPane().add(b1); b1.addActionListener(this); } public void actionPerformed(ActionEvent e) { System.out.println("Clicked"); } public static void main(String args[]) { btnclick b = new btnclick(); b.setSize(300,200); b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); b.setVisible(true); } }
Теперь мы напишем код Jython, эквивалентный тому же коду.
Для начала нам не нужно импортировать ActionEvent или ActionListener, поскольку динамическая типизация Jython позволяет нам не упоминать эти классы в нашем коде.
Во-вторых, нет необходимости реализовывать или создавать подкласс ActionListener. Вместо этого любая пользовательская функция сразу предоставляется конструктору JButton в качестве значения свойства bean-компонента actionPerformed .
button = JButton('Click here!', actionPerformed = clickhere)
Функция clickhere () определяется как обычная функция Jython, которая обрабатывает событие нажатия кнопки.
def change_text(event): print clicked!'
Вот эквивалентный код Jython.
from javax.swing import JFrame, JButton frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(300,200) def clickhere(event): print "clicked" btn = JButton("Add", actionPerformed = clickhere) frame.add(btn) frame.setVisible(True)
Вывод кода Java и Jython идентичен. Когда кнопка нажата, она напечатает сообщение «нажал» на консоли.
В следующем коде Jython в окне JFrame предусмотрены два объекта JTextField для ввода меток в «phy» и «maths». Объект JButton выполняет функцию add () при нажатии.
btn = JButton("Add", actionPerformed = add)
Функция add () считывает содержимое двух текстовых полей методом getText () и анализирует их в целые числа, чтобы можно было выполнить сложение. Затем результат помещается в третье текстовое поле методом setText ().
def add(event): print "add" ttl = int(txt1.getText())+int(txt2.getText()) txt3.setText(str(ttl))
Полный код приведен ниже —
from javax.swing import JFrame, JLabel, JButton, JTextField from java.awt import Dimension frame = JFrame("Hello") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(300,200) frame.setLayout(None) def add(event): print "add" ttl = int(txt1.getText())+int(txt2.getText()) txt3.setText(str(ttl)) lbl1 = JLabel("Phy") lbl1.setBounds(60,20,40,20) txt1 = JTextField(10) txt1.setBounds(120,20,60,20) lbl2 = JLabel("Maths") lbl2.setBounds(60,50,40,20) txt2 = JTextField(10) txt2.setBounds(120, 50, 60,20) btn = JButton("Add", actionPerformed = add) btn.setBounds(60,80,60,20) lbl3 = JLabel("Total") lbl3.setBounds(60,110,40,20) txt3 = JTextField(10) txt3.setBounds(120, 110, 60,20) frame.add(lbl1) frame.add(txt1) frame.add(lbl2) frame.add(txt2) frame.add(btn) frame.add(lbl3) frame.add(txt3) frame.setVisible(True)
Когда приведенный выше код выполняется из командной строки, появляется следующее окно. Введите оценки для «Phy», «Математика» и нажмите кнопку «Добавить». Результат будет отображаться соответственно.
Jython JRadioButton Event
Класс JRadioButton определяется в пакете javax.swing . Он создает переключаемую кнопку с включенным или выключенным состояниями. Если в ButtonGroup добавлено несколько переключателей, их выбор является взаимоисключающим.
В следующем примере два объекта класса JRadioButton и два JLabels добавляются в контейнер Jpanel в вертикальном BoxLayout. В конструкторе объектов JRadioButton функция OnCheck () задается в качестве значения свойства actionPerformed. Эта функция выполняется при нажатии переключателя, чтобы изменить его состояние.
rb1 = JRadioButton("Male", True,actionPerformed = OnCheck) rb2 = JRadioButton("Female", actionPerformed = OnCheck)
Обратите внимание, что для Radio Button по умолчанию установлено значение false (не выбрано). Кнопка rb1 создается с ее начальным состоянием как True (выбрано).
Две радиокнопки добавляются в радиокнопку ButtonGroup, чтобы сделать их взаимоисключающими, так что если одна из них выбрана, другая автоматически отменяется.
grp = ButtonGroup() grp.add(rb1) grp.add(rb2)
Эти две радиокнопки вместе с двумя метками добавляются к объекту панели в вертикальной компоновке с областью разделителя 25 пикселей по высоте между rb2 и lbl2.
panel = JPanel() panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS)) panel.add(Box.createVerticalGlue()) panel.add(lbl) panel.add(rb1) panel.add(rb2) panel.add(Box.createRigidArea(Dimension(0,25))) panel.add(lbl1)
Эта панель добавляется к объекту JFrame верхнего уровня, в конце которого свойство visible имеет значение True.
frame = JFrame("JRadioButton Example") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(250,200) frame.setVisible(True) The complete code of radio.py is given below: from javax.swing import JFrame, JPanel, JLabel, BoxLayout, Box from java.awt import Dimension from javax.swing import JRadioButton,ButtonGroup frame = JFrame("JRadioButton Example") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(250,200) panel = JPanel() panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS)) frame.add(panel) def OnCheck(event): lbl1.text = "" if rb1.isSelected(): lbl1.text = lbl1.text+"Gender selection : Male" else: lbl1.text = lbl1.text+"Gender selection : Female " lbl = JLabel("Select Gender") rb1 = JRadioButton("Male", True,actionPerformed = OnCheck) rb2 = JRadioButton("Female", actionPerformed = OnCheck) grp = ButtonGroup() grp.add(rb1) grp.add(rb2) lbl1 = JLabel("Gender Selection :") panel.add(Box.createVerticalGlue()) panel.add(lbl) panel.add(rb1) panel.add(rb2) panel.add(Box.createRigidArea(Dimension(0,25))) panel.add(lbl1) frame.setVisible(True)
Запустите приведенный выше скрипт Jython и измените выбор переключателей. Выбор появится на ярлыке внизу.
Jython JCheckBox Event
Как и JRadioButton , объект JCheckBox также является выбираемой кнопкой с прямоугольным флажком, помимо заголовка. Это обычно используется, чтобы предоставить пользователю возможность выбрать несколько вариантов из списка элементов.
В следующем примере два флажка и метка из пакета свинга добавляются в JPanel в вертикальном BoxLayout. Метка внизу отображает мгновенное состояние выбора двух флажков.
Оба флажка объявлены с конструктором, имеющим свойство actionPerformed, установленное в функцию OnCheck () .
box1 = JCheckBox("Check1", actionPerformed = OnCheck) box2 = JCheckBox("Check2", actionPerformed = OnCheck)
Функция OnCheck () проверяет состояние выбора каждого флажка и отображает соответствующее сообщение на ярлыке внизу.
def OnCheck(event): lbl1.text = "" if box1.isSelected(): lbl1.text = lbl1.text + "box1 selected " else: lbl1.text = lbl1.text + "box1 not selected " if box2.isSelected(): lbl1.text = lbl1.text + "box2 selected" else: lbl1.text = lbl1.text + "box2 not selected"
Эти поля и объект JLabel добавляются в JPanel, между ними добавляется пробел размером 50 пикселей.
panel = JPanel() panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS)) panel.add(Box.createVerticalGlue()) panel.add(box1) panel.add(box2) panel.add(Box.createRigidArea(Dimension(0,50))) panel.add(lbl1)
Сама панель добавляется в окно JFrame верхнего уровня, в конце которого свойство visible имеет значение true.
frame = JFrame("JCheckBox Example") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(250,150) frame.add(panel) frame.setVisible(True)
Запустите приведенный выше код и поэкспериментируйте с выбором флажков. Мгновенное состояние обоих флажков отображается внизу.
Jython JList Event
Элемент управления JList в свинг-пакете предоставляет пользователю список элементов с возможностью прокрутки. JComboBox предоставляет выпадающий список элементов. В Java событие выбора обрабатывается путем реализации метода valueChanged () в ListSelectionListener. В Jython обработчик событий назначается свойству valueChanged объекта JList.
В следующем примере объект JList и метка добавляются в JFrame в BorderLayout. JList заполнен коллекцией элементов в кортеже. Его свойство valueChanged установлено в функцию listSelect ().
lang = ("C", "C++", "Java", "Python", "Perl", "C#", "VB", "PHP", "Javascript", "Ruby") lst = JList(lang, valueChanged = listSelect)
Функция обработчика событий получает индекс выбранного элемента и извлекает соответствующий элемент из объекта JList для отображения на метке внизу.
def listSelect(event): index = lst.selectedIndex lbl1.text = "Hello" + lang[index]
Объекты JList и JLabel добавляются в JFrame с помощью BorderLayout.
Весь код приведен ниже —
from javax.swing import JFrame, JPanel, JLabel, JList from java.awt import BorderLayout frame = JFrame("JList Example") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(300,250) frame.setLayout(BorderLayout()) def listSelect(event): index = lst.selectedIndex lbl1.text = "Hello" + lang[index] lang = ("C", "C++", "Java", "Python", "Perl", "C#", "VB", "PHP", "Javascript", "Ruby") lst = JList(lang, valueChanged = listSelect) lbl1 = JLabel("box1 not selected box2 not selected") frame.add(lst, BorderLayout.NORTH) frame.add(lbl1, BorderLayout.SOUTH) frame.setVisible(True)
Вывод следующего кода выглядит следующим образом.
Jython — Меню
Большинство приложений с графическим интерфейсом имеют панель меню вверху. Он находится чуть ниже строки заголовка окна верхнего уровня. В пакете javax.swing есть сложное средство для создания эффективной системы меню. Он построен с помощью классов JMenuBar, JMenu и JMenuItem .
В следующем примере строка меню предоставляется в окне верхнего уровня. Меню Файл, состоящее из трех кнопок пунктов меню, добавляется в строку меню. Давайте теперь подготовим объект JFrame с макетом, установленным в BorderLayout.
frame = JFrame("JMenuBar example") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(400,300) frame.setLayout(BorderLayout())
Теперь объект JMenuBar активируется методом SetJMenuBar ().
bar = JMenuBar() frame.setJMenuBar(bar)
Затем объявляется объект JMenu с заголовком «Файл». Три кнопки JMenuItem добавляются в меню «Файл». При щелчке любого из пунктов меню выполняется функция OnClick () обработчика ActionEvent. Это определяется свойством actionPerformed.
file = JMenu("File") newfile = JMenuItem("New",actionPerformed = OnClick) openfile = JMenuItem("Open",actionPerformed = OnClick) savefile = JMenuItem("Save",actionPerformed = OnClick) file.add(newfile) file.add(openfile) file.add(savefile) bar.add(file)
Обработчик события OnClick () получает имя кнопки JMenuItem с помощью функции gwtActionCommand () и отображает ее в текстовом поле в нижней части окна.
def OnClick(event): txt.text = event.getActionCommand()
Объект меню Файл добавлен в строку меню. Наконец, элемент управления JTextField добавляется внизу объекта JFrame.
txt = JTextField(10) frame.add(txt, BorderLayout.SOUTH)
Весь код menu.py приведен ниже —
from javax.swing import JFrame, JMenuBar, JMenu, JMenuItem, JTextField from java.awt import BorderLayout frame = JFrame("JMenuBar example") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(400,300) frame.setLayout(BorderLayout()) def OnClick(event): txt.text = event.getActionCommand() bar = JMenuBar() frame.setJMenuBar(bar) file = JMenu("File") newfile = JMenuItem("New",actionPerformed = OnClick) openfile = JMenuItem("Open",actionPerformed = OnClick) savefile = JMenuItem("Save",actionPerformed = OnClick) file.add(newfile) file.add(openfile) file.add(savefile) bar.add(file) txt = JTextField(10) frame.add(txt, BorderLayout.SOUTH) frame.setVisible(True)
Когда вышеуказанный скрипт выполняется с использованием интерпретатора Jython, появляется окно с меню «Файл». Нажмите на нее, и три ее пункта меню будут раскрыты. Если нажата какая-либо кнопка, ее имя будет отображаться в элементе управления текстового поля.
Jython — диалоги
Объект Dialog — это окно, которое появляется поверх базового окна, с которым взаимодействует пользователь. В этой главе мы увидим предварительно сконфигурированные диалоги, определенные в библиотеке свинга. Это MessageDialog, ConfirmDialog и InputDialog . Они доступны из-за статического метода класса JOptionPane.
В следующем примере меню «Файл» содержит три элемента JMenu, соответствующие трем вышеупомянутым диалоговым окнам; каждый выполняет обработчик события OnClick .
file = JMenu("File") msgbtn = JMenuItem("Message",actionPerformed = OnClick) conbtn = JMenuItem("Confirm",actionPerformed = OnClick) inputbtn = JMenuItem("Input",actionPerformed = OnClick) file.add(msgbtn) file.add(conbtn) file.add(inputbtn)
Функция обработчика OnClick () получает заголовок кнопки «Пункт меню» и вызывает соответствующий метод showXXXDialog ().
def OnClick(event): str = event.getActionCommand() if str == 'Message': JOptionPane.showMessageDialog(frame,"this is a sample message dialog") if str == "Input": x = JOptionPane.showInputDialog(frame,"Enter your name") txt.setText(x) if str == "Confirm": s = JOptionPane.showConfirmDialog (frame, "Do you want to continue?") if s == JOptionPane.YES_OPTION: txt.setText("YES") if s == JOptionPane.NO_OPTION: txt.setText("NO") if s == JOptionPane.CANCEL_OPTION: txt.setText("CANCEL")
Если выбрана опция сообщения из меню, появится сообщение. Если выбрана опция Input, появится диалоговое окно с запросом ввода. Введенный текст затем отображается в текстовом поле в окне JFrame. Если выбран параметр «Подтвердить», появится диалоговое окно с тремя кнопками «ДА», «НЕТ» и «ОТМЕНА». Выбор пользователя записывается в текстовом поле.
Весь код приведен ниже —
from javax.swing import JFrame, JMenuBar, JMenu, JMenuItem, JTextField from java.awt import BorderLayout from javax.swing import JOptionPane frame = JFrame("Dialog example") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setLocation(100,100) frame.setSize(400,300) frame.setLayout(BorderLayout()) def OnClick(event): str = event.getActionCommand() if str == 'Message': JOptionPane.showMessageDialog(frame,"this is a sample message dialog") if str == "Input": x = JOptionPane.showInputDialog(frame,"Enter your name") txt.setText(x) if str == "Confirm": s = JOptionPane.showConfirmDialog (frame, "Do you want to continue?") if s == JOptionPane.YES_OPTION: txt.setText("YES") if s == JOptionPane.NO_OPTION: txt.setText("NO") if s == JOptionPane.CANCEL_OPTION: txt.setText("CANCEL") bar = JMenuBar() frame.setJMenuBar(bar) file = JMenu("File") msgbtn = JMenuItem("Message",actionPerformed = OnClick) conbtn = JMenuItem("Confirm",actionPerformed = OnClick) inputbtn = JMenuItem("Input",actionPerformed = OnClick) file.add(msgbtn) file.add(conbtn) file.add(inputbtn) bar.add(file) txt = JTextField(10) frame.add(txt, BorderLayout.SOUTH) frame.setVisible(True)
Когда приведенный выше скрипт выполняется, в меню отображается следующее окно с тремя параметрами: