
Заочники 2020-2021 / java_zaoch_sem_1
.pdflist.add(3L); |
|
|
Вышепривеперемесоздаиндиеобавлениечислаееной3 |
|
. Т.к. |
LinkedList реализуетинтерфейс |
List,то |
перемеожнобъявлятьпростоную |
какList,неLinkedList. |
|
|
List<Long> list; |
|
|
Внутри <…> указываетсякакойтип |
|
импеютременныевколлекции.Там |
можетбытьабсолютнолюбойкласс,втомчидругаяслеколлекция. |
|
|
Исключения
ВязыкеJava |
объектисключениявсегдаявляетсяэкземпляромкласса, |
|
|||
производногоот |
Throwable |
|
|
||
(http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html). |
|||||
Уэтогоклассаестьдвапрямыхпотомка |
|
|
java.lang.Error и java.lang.Exception. |
||
Класс Error иегонаследописываютникиутренношибкситуации, е |
|
||||
связанные снехваткойресурсов,системеподдыпржкио.лненияманд |
|
||||
Ниодинобъектэтоготипасамостоятельносгенерироватьневозм. жно |
|
|
|||
Чащевсегоприходитсталкиватькла самия |
|
|
Exception иегонаследниками. |
||
Всехпрямыхпотомков |
|
|
Exception можразндаоелитьве |
категории: |
|
unchecked(RuntimeException ивсеегоп томки |
) и unchecked(всеостальные) |
||||
исключения.Исключениятипа |
RuntimeException возникаютвследствие |
||||
ошибокпрограммневерноеания,напр, ипмеритипов,вызодедениеза |
|
|
|||
пределымассива,попыткаобратитьс |
|
|
як null объекту. |
||
Чтобыброскакоелитьбосключениенеобходимовоспользоваться |
|
|
|||
ключесловомым |
|
|
throw иуказатьобъектисключения |
. |
throw new IOException();
Дляобработкиисключенийсуществуеткла истблоковзчtry,масая catch, finally.
21
try {
// блок try
}catch(IOException e) { //блокcatch
}finally {
// блок finally |
|
|
} |
|
|
Блок catch – люббл,вкоторомкйвывхотитепойматьисключение.Вблоке |
|
|
catch описываетсядейс,конеобходимовиеорыевыполнитьслучае |
|
|
возниисключений.новенияВ |
catch указываетсяприкакомипесключение |
|
необходимовыполнитьдействие.Вданномприблокере |
catch будетвызван |
|
привозникновении |
IOException, либолюбодруисключенияго,готорое |
|
являетсяпотомком |
IOException. Блоков catch можетбытьлюбоеколичество. |
|
Блок finally вызывсегда.Неважновозниетсялиисключениеилинет.о |
|
|
Необязнаблоковличиетельно |
catch и finally. Можетбытолькоуказан |
|
catch илитолько |
finally. |
|
Вслучае,есливметодевынехотитеобрабатывать |
checked исключение |
|
ходитеотдатьобр |
аботисключенияметоду,которыйвызвалэтотметод, |
|
необходвсигнатуреметодасделатьпометом,чэтотметодкуможет |
|
|
броисключениеить. |
Например, |
|
public void test() throws IOException { |
|
|
// тутнахк,одкотитсяможетвызватьрый |
IOException |
|
} |
|
|
В Java естьдостатбольшоеколичествочноисключений,ноих,какправило, |
|
|
нехватает.Ничнемешреоасвоелетисключениезоватьунаследовать |
|
|
егоот Exception. |
|
|
22
Разработкаприложенийсграфическиминтерфейсом
ПерваяверсияязыкаJava |
содержалабиблиоте |
куклассов Abstract Window |
Toolkit (AWT),предосновныетасредствапрограммированияляющую |
||
графичинтнаконкретнрфейсаскогоплатф( ормей |
Windows, Macintosh…) |
|
Позднеепоявился |
Swing,которыйнеявляетсяполнойзаменойAWT ( |
взяты |
некоторархитеосновы |
ктуры). Swing содержитболеебогаудобный |
|
наборэлементов |
пользовательскогоинтерфейса. |
Swing менеезависимот |
платформы,накоторвыполняетсяприложенией.Такжеэтабиблиотека |
|
|
обеспечиваетоднотипсредствадляработынразныхыеплатформах.В |
|
|
посвойствеледнкроиндом.Т.к.нативныеокярешения,к |
|
|
которымпривыкпользовательопределен |
ноперационнойсистемы,могут |
|
выглядиначприложении,реализованномть спомощью |
Swing. |
Фреймы
Фрейм – окноверхнегоуровнят..( ,кононетороесодержитсявнутри |
|
|
другогоокна)В.библиотекеSwing |
онпредставленклассом |
JFrame. |
Посмотримнапример |
ростоприложения,котс проспустоездаетрое |
|
окно. |
|
|
public class Test { |
|
|
public static void main(String[] args) { MyFrame frame = new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
}
}
public class MyFrame extends JFrame { public MyFrame() {
setSize(300, 200);
}}
23
Послезапусканаэкранедолжноотобразитьсяпустоеокноразмерами300
на200.
Разберемподробнеенекотстр. рыеки frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Задаетдействиенажатиекр« (закрытиястикаокна)»По. |
-умолчанию |
действиепонажатиюкрестик« »делает |
фрейм простоневидимым.Для |
того,чтобывыходитьизпрограммынужнопрописать |
|
JFrame.EXIT_ON_CLOSE. |
|
По-умолчаниюфрейм |
создаетсяневидимым,поэтпослемуздания |
необходимоемууказатьвидимость. |
|
frame.setVisible(true) |
|
Подробнеесовсемимет дамиступнымдляфреймаожнознакомиться тут.
http://docs.oracle.com/javase/8/docs/api/javax/swing/JFrame.html
Java 2D
Итак,всеклассыотвечающзаотрисразлоконивкукомпонентовчный
графическихприложнаслотклассанияхдуются java.awt.Component http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html.Но сейчас остановимсяподробнеенаегочернемклассе javax.swing.JComponent http://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html.От данаследуюноговсекомпоненрасположены, тсябырыегутьна фрейме.
Вклассе javax.swing.Component естьметод protected void printComponent(Graphics g)
http://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#printCom ponent-java.awt.Graphics-
Данныйметодвсегдавызываетприотрисовкекомпон.Разбентарем подробнеекакпроисходитотрисовкомпоне,аименкарабнсоттать
24
классом Graphics. |
|
|
|
(http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html) |
|
||
Начинаясверсии1классе.0, |
|
Graphics имелисьметодыдлярисования |
|
линий,прямоуголь,эллипсовт.д.Нофунбыликовкционвесьмал |
|
|
|
ограничен.Невозмбылодажеизменитьширинжо |
улиний. |
|
|
Вверсии1появи.2библиотекаась |
Javaсболеемощным2Dфункционалом. |
|
|
Длятого,чтобывоспользвозмJavaожностямивать |
2D, необходимо |
||
создатьобъекткласса |
Graphics2D, которыйявляетсяподклассом |
Graphics. |
|
public void paintComponent(Graphics g) { |
|
||
Graphics2D g2 = (Graphics2D) g; |
|
||
} |
|
|
|
Присозданиигеометрическихфвбиблиотекегур |
Java 2D применяется |
||
объектно-ориентирподх.Всефигурыонаследуютсяванныйотинтерфейса |
|
||
Shape. Например,такиеклассы,как |
Line2D, Rectangle2D, Ellipse2D. |
||
Подробнеес |
овсемиклассамиожнознакомитьсяв фициальной |
|
документации http://docs.oracle.com/javase/8/docs/api/java/awt/Shape.html.
Далеебудетприведенпримерработысэтимиклассами. import java.awt.*;
import java.awt.geom.*; import javax.swing.*;
/**
*@version 1.32 2007-04-14
*@author Cay Horstmann */
public class DrawTest
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
25
{
public void run()
{
DrawFrame frame = new DrawFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
}
});
}
}
/**
* A frame that contains a panel with drawings */
class DrawFrame extends JFrame
{
public DrawFrame()
{
setTitle("DrawTest");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// add panel to frame
DrawComponent component = new DrawComponent(); add(component);
}
public static final int DEFAULT_WIDTH = 400; public static final int DEFAULT_HEIGHT = 400;
}
26
/**
* A component that displays rectangles and ellipses. */
class DrawComponent extends JComponent
{
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
// draw a rectangle
double leftX = 100; double topY = 100; double width = 200; double height = 150;
Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height); g2.draw(rect);
// draw the enclosed ellipse
Ellipse2D ellipse = new Ellipse2D.Double(); ellipse.setFrame(rect);
g2.draw(ellipse);
// draw a diagonal line
g2.draw(new Line2D.Double(leftX, topY, leftX + width, topY + height));
27
// draw a circle with the same center
double centerX = rect.getCenterX(); double centerY = rect.getCenterY(); double radius = 150;
Ellipse2D circle = new Ellipse2D.Double(); circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY +
radius);
g2.draw(circle);
}
}
ОснкомпонентывныеSwing
Рассмотримвсеоснк вныемпоненты,котд ступнырыев Swing.
Начнемскомпонентзволяют,кот рыевводиредактироватьтекст. JTextField(http://docs.oracle.com/javase/8/docs/api/javax/swing/JTextField.html)
– позволяетоднострочныйвводтекста, JTextArea
(http://docs.oracle.com/javase/8/docs/api/javax/swing/JTextArea.html) –
позввмногострочноголяетдтекстаи JPasswordField
(http://docs.oracle.com/javase/8/docs/api/javax/swing/JPasswordField.html) – для
однострочноговводатекста,приэтом,содержимоенеотображается. |
|
Дляотображеннередактданных(лейблови)руемыхяможно |
|
воспользкомповатьсянентом |
JLabel |
(http://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html).
КнопреалвклассеизованыJButton (http://docs.oracle.com/javase/8/docs/api/javax/swing/JButton.html).
Примервсехкомпонент можнонайтивпапке components_1.
28
Компоновка элементов
Длярасполэлеменаожениикиспторазличныевльзуютсядиспетчеры |
|
|
компоновки( |
layout manager)Стандартным. диспетчеромкомпоновки |
|
является flow layout manager. Вседобавляэлембудуемыент |
добавляться |
|
слеванапр,есэволинеементпомещавс ,торонекуреноситсяна |
|
|
следующуюстроку. |
|
|
•Border layout (http://docs.oracle.com/javase/8/docs/api/java/awt/BorderLayout.html) -
позволяет распкомлагатьспривязкойонентыобластям.При |
|
добавлениикомпнеобходимоуказатьнентыоднуизконстант. |
SOUTH |
(южная), NORTH (северная), WEST (западная), EAST (восточная)или |
|
CENTER (центральная). Примерможнопосмотретьв |
components_2. |
•Grid layout (http://docs.oracle.com/javase/8/docs/api/java/awt/GridLayout.html) -
размещаеткомпонентыстрокамистолбцам,каквтаблице.
Компонендобавляютсяпострочно,сначалаы |
|
– впе рвуюячейку |
первойстроки,затем |
– вовторуюячейкупервойстроки.д. |
Пример |
можнопосмотретьв |
components_3. |
|
Всуществуетегобольшоеколичедругихдискомпонтвопетчеро,болеевки
того,выможетереализоватьсв бственный.
Обрасобытийка
Каждая операционнподдерживающаясреда, гр фическийинтерфе, с |
|
||
непрерывноотслеживтакиесобытия,какнажатиеклаветилщелчокш |
|
|
|
мыши,азатемсоонихбщаютвыполняемойпрог.Пррешаетаммеограмма, |
|
|
|
какреагированаэтисобытия. ь |
|
|
|
ТаккакJava |
являетсяполнос |
тьюобъектно |
-ориентязык,тоированным |
иерарвсобытхначинаетиясодногоклассаяя |
|
java.util.EventObject |
|
(http://docs.oracle.com/javase/8/docs/api/java/util/EventObject.html). Например, |
|||
кнопкаможетсоздаватьобъектыкласса |
|
ActionEvent |
29
(http://docs.oracle.com/javase/8/docs/api/java/awt/event/ActionEvent.html),а
окно WindowEvent (http://docs.oracle.com/javase/8/docs/api/java/awt/event/WindowEvent.html).
Краткомеханизмобрасоботкиытжнопследующимйсатьобразом.
• |
Объект – слушательпредставсобойэкземпляр,ассаяет |
|
|
|
реализующегоспециальныйинтерфейс,называинтерфейсомый |
м |
|
|
слушателя. |
|
|
• |
Истобытиячник |
– этообъект,котможетрегистрироватьрый |
|
|
слушатеипосыимобъектылсобытийейать. |
|
|
• Принаступлениисобытийистпосылаетчникобъексобытиявсем |
|
||
|
зарегистрированнымслушателям. |
|
|
• |
Слушателииспользуютинформацию,инкапсулирован |
нуювобъекте |
|
|
события,длятого,чтобырешать,какреагироватьнаэтос .бытие |
|
|
Примерможнопосмотретьв |
components_4. |
|
30