Здравствуйте дорогие читатели!
Содержание
1.Начинающим2.Тема "на заказ"
3.Вопрос - ответ
4.Программный код…
5.JavaScript
Начинающим
Булевы логические операторы
Булевы логические операторы, сводка которых приведена в таблице ниже, оперируют только с операндами типа boolean. Все бинарные логические операторы воспринимают в качестве операндов два значения типа boolean и возвращают результат того же типа.
Оператор | Результат | Оператор | Результат |
& | логическое И (AND) | &= | И (AND) с присваиванием |
| | логическое ИЛИ (OR) | |= | ИЛИ (OR) с присваиванием |
^ | логическое исключающее ИЛИ (XOR) | ^= | исключающее ИЛИ (XOR) с присваиванием |
|| | оператор OR быстрой оценки выражений (short circuit OR) | == | равно |
&& | оператор AND быстрой оценки выражений (short circuit AND) | != | не равно |
! | логическое унарное отрицание (NOT) | ?: | тернарный оператор if-then-else |
Результаты воздействия логических операторов на различные комбинации значений операндов показаны в таблице.
A | В | OR | AND | XOR | NOT A |
false | false | false | false | false | true |
true | false | true | false | true | false |
false | true | true | false | true | true |
true | true | true | true | false | false |
Программа, приведенная ниже, практически полностью повторяет уже знакомый вам из прошлого номера пример BitLogic. Только но на этот раз мы работаем с булевыми логическими значениями.
class BoolLogic { public static void main(String args[]) { boolean a = true; boolean b = false; boolean с = a | b; boolean d = a & b; boolean e = a ^ b; boolean f = (!a & b) | (a & !b); boolean g = !a; System.out.println(" a = " + a); System.out.println(" b = " + b); System.out.println(" a|b = " + c); System.out.println(" a&b; = " + d); System.out.println(" a^b = " + e); System.out.println("!a&b;|a&!b = " + f); System.out.println(" !a = " + g); } }
С: \> Java BoolLogic а = true b = false a|b = true a&b; = false a^b = true !a&b;|a&!b = true !a = false
В следующем номере мы рассмотрим операторы быстрой оценки логических выражений (short circuit logical operators)
Тема "на заказ"
Печать из Java-приложений (продолжение)
Методы класса Printer
Теперь, когда мы определили printerObjects, которые мы будем применять, легко проследить, как объект Printer будет их использовать. Мы просто создаём новый экземпляр каждого типа printerObject и добавляем его в vector:
public void setFont(Font f) { objects.addElement(new printFont(f)); } //-------------------------------------- public void print(String s) { objects.addElement(new printString(s)); } //--------------------------------------------------- public void println(String s) { print(s); objects.addElement(new newLine()); } //-------------------------------------- public void tab(int tabstop) { objects.addElement(new printTab(tabFont, tabstop)); }
Кроме данных методов печати, нам нужны методы newPage и endJob. Метод newPage фактически выполняет всю работу. Он вызывает метод print(g), который проходит через весь список printerObjects и вызывает их методы draw().
public void newPage() { if (pjob == null) pjob = getToolkit().getPrintJob(f, "Printer", null); pg = pjob.getGraphics(); print(pg); //прорисовываем весь вектор pg.dispose(); //печатаем страницу pt =new Point( 0, 0); //инициализируем заново objects = new Vector(); //печатаем объекты } //----------------------------------- public void print(Graphics g) { printerObject p; f.setFont(fnt); //начинать с определённого шрифта for (int i = 0; i < objects.size(); i ++) { p = (printerObject)objects.elementAt(i); p.draw(g, pt); //рисуем каждый объект } }
Метод endJob() завершает PrintJob. Если вы игнорируете этот метод, вы можете также закончить PrintJob, вызвав его в методе finalize().
public void finalize() { if (objects.size() > 0) //убеждаемся что все объекты напечатаны newPage(); endJob(); } //-------------------------------------- public void endJob() { pjob.end(); }
Предварительный просмотр печатаемой страницы
С помощью объекта Printer, который мы только что создали, отобразить всю страницу на экране не представляет труда: просто нам нужно вызвать тот же метод print(g), используя объект Graphics экрана вместо объекта Graphics принтера. Откуда мы получаем объект graphics экрана? Мы берем его из стандартного метода paint(), который мы, в свою очередь, используем для вызова метода печати.
public void paint(Graphics g) { pt = new Point(0, 0); //always start at top print(g); //displays text as preview }
Всюпрограмму печати можно посмотреть в разделе "программный код".
Вопрос - ответ
Вопрос:
Немогли бы дать описание класса URL
Ответ:
Описание класса URL
Программный код…
Программа печати
import java.awt.*; import java.awt.event.*; import java.util.*; public class printing extends Frame implements ActionListener, WindowListener { Button b, show; Printer printer; //--------------------------------------------------- public printing() { super("print test"); //название фрейма addWindowListener(this); Panel p = new Panel(); //панель для кнопок add("South", p); b = new Button("Print"); //кнопки p.add("South", b); b.addActionListener(this); show = new Button("Show"); p.add(show); show.addActionListener(this); printer = new Printer(this); setBounds(100,100,100,100); setVisible(true); loadStrings(); } //--------------------------------------------------- private void loadStrings() { //puts the text into the Printer object int i = 1; printer.setFont(new Font("SanSerif", Font.PLAIN, 12)); printer.print(i++ +"."); printer.tab(10); printer.println("Hello printer"); printer.print(i++ +"."); printer.tab(10); printer.setFont(new Font("SanSerif", Font.BOLD, 12)); printer.println("A bold stroke"); printer.print(i++ +"."); printer.tab(10); printer.setFont(new Font("SanSerif", Font.ITALIC, 18)); printer.println("but emphatic"); } //--------------------------------------------------- public void actionPerformed(ActionEvent ev) { Object obj = ev.getSource(); if (obj == b) { printer.newPage(); //распечатка на странице printer.endJob(); } if (obj == show) { showPreview(); //или на экране } } //--------------------------------------------------- private void showPreview() { Dimension d = printer.pageSize(); setBounds(0 , 0, d.width, d.height); printer.setBounds(0, 0, d.width, d.height); printer.setVisible(true); } //--------------------------------------------------- static public void main(String argv[]) { new printing(); } //------------------------------------------------- public void windowClosing(WindowEvent wEvt) { System.exit(0); } public void windowClosed(WindowEvent wEvt){} public void windowOpened(WindowEvent wEvt){} public void windowIconified(WindowEvent wEvt){} public void windowDeiconified(WindowEvent wEvt){} public void windowActivated(WindowEvent wEvt){} public void windowDeactivated(WindowEvent wEvt){} } //=============================================== class Printer extends Canvas { Frame f; //родительский фрейм PrintJob pjob; //объект printjob Graphics pg; //printer graphics Vector objects; //массив инструкций для printer Point pt; //текущая позиция принтера Font fnt; //current font Font tabFont; //шрифт public Printer(Frame frm) { f = frm; //сохраняемая форма f.add(this); //добавляем этот объект к форме setVisible(false);//но не показываем pjob = null; //не распечатываем pt =new Point( 0, 0); //инициализируем текущею позицию принтера objects = new Vector(); //и массив объектов tabFont = new Font("MonoSpaced", Font.PLAIN, 12); fnt = new Font("SansSerif", Font.PLAIN, 12); } //-------------------------------------- public void setFont(Font f) { objects.addElement(new printFont(f)); } //-------------------------------------- public void print(String s) { objects.addElement(new printString(s)); } //--------------------------------------------------- public void println(String s) { print(s); objects.addElement(new newLine()); } //-------------------------------------- public void newPage() { if (pjob == null) pjob = getToolkit().getPrintJob(f, "Printer", null); pg = pjob.getGraphics(); print(pg); pg.dispose(); pt =new Point( 0, 0); //инициализируем текущею позицию принтера objects = new Vector(); //и массив объектов } //-------------------------------------- public void finalize() { if (objects.size() > 0) newPage(); endJob(); } //-------------------------------------- public void endJob() { pjob.end(); } //-------------------------------------- public void tab(int tabstop) { objects.addElement(new printTab(tabFont, tabstop)); } //-------------------------------------- public Dimension pageSize() { if (pjob == null) return new Dimension(620, 790); else { pjob = getToolkit().getPrintJob(f, "Printer", null); return pjob.getPageDimension(); } } //--------------------------------------------------- public void paint(Graphics g) { pt = new Point(0, 0); print(g); //предварительный просмотр } //--------------------------------------------------- public void print(Graphics g) { printerObject p; f.setFont(fnt); //начать с этим шрифтом for (int i = 0; i < objects.size(); i ++) { p = (printerObject)objects.elementAt(i); p.draw(g, pt); } } } //=================================================== abstract class printerObject { abstract void draw(Graphics g, Point p); } //=================================================== class newLine extends printerObject { public void draw(Graphics g, Point p) { p.x = 0; p.y += g.getFontMetrics(g.getFont()).getHeight(); } } //===================================================== class printString extends printerObject { String st; public printString(String s) { st = s; } //------------------------------------------------- public void draw(Graphics g, Point p) { g.drawString(st, p.x, p.y); p.x += g.getFontMetrics(g.getFont()).stringWidth(st); } } //=================================================== class printFont extends printerObject { Font fnt; public printFont(Font f) { fnt = f; } //-------------------------------------------------- public void draw(Graphics g, Point p) { g.setFont(fnt); if (p.y <= 0) { p.y = g.getFontMetrics(fnt).getHeight(); } } } //=================================================== class printTab extends printerObject { static int tab_width = 0; int tab_dist; Font tabFnt; public printTab(Font tbFont, int tabdist) { tabFnt = tbFont; tab_dist = tabdist; } public void draw(Graphics g, Point p) { if (tab_width == 0) tab_width = g.getFontMetrics(tabFnt).stringWidth("W"); if (p.x < (tab_dist*tab_width)) { p.x = tab_dist * tab_width; } } }
JavaScript
Вопрос:
Как в history вернуться на несколько позиций сразу?
Ответ: Надо использовать метод go(), например:
<a; href="javascript:history.go(-2)">Назад на две позиции</a>или
<a; href="javascript:history.go(2)">Вперёд на две позиции</a>
Вопрос:Я где то видела часики в строке статуса, как это можно сделать?
Светик
Ответ:
<html;> <head;> <title;>Часы</title> <script; language="JavaScript"> function clock() { today=new Date(); clock_status=today.getHours()+":"+today.getMinutes()+":"+today.getSeconds() status=clock_status; setTimeout("clock()",100); } </script> </head> <body; onLoad="clock()"> </body> </html>
Можете глянуть ещё пару вариантов часиков тут.
Вопросы присылайте на E-mail [email protected] с пометкой "вопрос по Java".
Жду вопросов и предложений.
Юрий Ладик.
Подписаться на эту рассылку можно тут /subs/subs.html