jEdit portable

Оказавается сделать portable версию jEdit проще простого. Для этого нам понадобится jre и сам jEdit, установленный на жесткий диск. Итак:
  1. Копируем jEdit на флэшку.
  2. Копируем профиль на флэшку (если есть).
  3. Создаем пакетный файл со следующим содержанием:


SET JAVA_HOME = jre\bin
java -Duser.home=. -jar jedit\jedit.jar -settings=.jedit

Вот и все. Теперь с помощью созданного пакетного файла jEdit будет запускаться с флэшки и хранить профиль на ней же.

OneJar и Netbeans

Иногда бывает нужно собрать проект со всеми библиотеками в один jar-архив. Для этих целей подходит One-JAR. Ниже опишу как подключить One-JAR к Netbeans.
Создать каталог one-jar в корне проекта.
Скачать и скопировать в one-jar one-jar ant task jar.
Создать в этом каталоге файл one-jar.xml со следующим содержанием:


<?xml version="1.0" encoding="UTF-8"?>
<project>
 <taskdef name="one-jar"
   classname="com.simontuffs.onejar.ant.OneJarTask"
   classpath="one-jar/one-jar-ant-task-0.96.jar"
   onerror="report"/><target name="one-jar">

 <one-jar destfile="dist/${ant.project.name}-one-jar.jar" manifest="manifest.mf">
   <main jar="dist/${ant.project.name}.jar"></main>
   <lib><fileset dir="dist/lib" /></lib>
 </one-jar>
</target>
</project>

Подключить one-jar.xml к build.xml:


<import file="one-jar/one-jar.xml" />

Java SE Development Kit 6u10

Вышло 10 обновление Java SE 6, которое содержит такие нововведения как:
  • Java Kernel
  • Next-Generation Java Plug-In
  • Java Deployment Toolkit
  • Nimbus Look and Feel
Скачать обновление: http://java.sun.com/javase/downloads/index.jsp

Букмарклеты: поиск

С помощью следующих букмарклетов можно выполнить поиск выделенного текста:
Добавить свой поисковик можно создав загладку, содержащую следующий javascript-код, заменив <Поисковая система> на поисковой запрос:


javascript:q = '' + (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text); if (!q) q = prompt('Поисковый запрос', ''); if (q!=nulllocation='<Поисковая система>' + q; void 0

JTable в стиле iTunes

На днях написал реализацию TableCellRenderer. Теперь JTable выглядит как в iTunes
Код класса:

package com.blogspot.ldisplay.swing.table;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class ITableCellRenderer extends DefaultTableCellRenderer {

 private static final long serialVersionUID = -6332850927184223196L;
 public static final Color selectedFocusedColor = Color.decode("#3D80DF");
 public static final Color selectedNotFocusedColor = Color.decode("#C0C0C0");
 public static final Color evenRowColor = Color.decode("#F1F5FA");
 public static final Color oddRowColor = Color.WHITE;
 public static final Color gridColor = new Color(217, 217, 217);

 public ITableCellRenderer() {
 }

 public String getText(Object aObject) {
     return aObject == null ? null : aObject.toString();
 }

 @Override
 public Component getTableCellRendererComponent(final JTable table, Object value,
         boolean isSelected, boolean hasFocus, final int row, int column) {

     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     if (isSelected) {
         if (table.hasFocus()) {
             setBackground(selectedFocusedColor);
             setForeground(Color.WHITE);
         } else {
             setBackground(selectedNotFocusedColor);
             setForeground(Color.BLACK);
         }
     } else {
         Color color = row % 2 == 0 ? evenRowColor : oddRowColor;
         setBackground(color);
         setForeground(Color.BLACK);
     }
     setText(getText(value));
     return this;
 }
}

Локализация Swing

На днях добавил в локализацию Swing, сделанную Сергеем Астаховым, локализацию для Mac OS X. Пришлось так же добавить свои классы ресурсов, общие для всех LaF, что бы все выглядело более родным в разных ОС. Для использования необходимо подключить jar-архив с локализацией к проекту, либо скоприровать в %JAVA_HOME%\lib\ext. Скачать можно здесь.

Букмарклеты: работа с цветом

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

Букмарклеты: Скачиваем видео с YouTube и тд.

Букмарклет для скачивания видео: Скачать видео.

Как работает
  1. Установить букмарклет.
  2. Перейти на сайт с видео.
  3. Нажать на букмарклет.
  4. Нажать на ссылку скачать файл.

Bookmarklets

Bookmarklets - это небольшая javascript-программа, оформленная как браузерная закладка. При щелчке по такой закладке запускается javascript, который выполняет какое-либо полезное действие. Перед использованием букмарклета нужно добавить его в закладки.

Приведу пример букмарклетов для изменения размера окна:
640 x 480
800 x 600
Во полный экран
Универсальный

Букмарклеты зачастую выполняют очень полезные функции, позволяя по одному щелчку мыши получить необходимый результат.

SystemTray в Java

В Java SE 6 появились два класса, позволяющий получить доступ к области уведомления, которые находятся в пакете java.awt: SystemTray и TrayIcon. Ниже я опишу предназначения классов и их основные методы. До выхода Java SE 6 приходилось пользоваться сторонними библиотеками.

SystemTray - основной класс, представляющий область уведомления. Основной метод класса – метод add, добавляющий объкт TrayIcon, который может выбрасывать исключение AWTException, есть метод remove, удаляющий объект TrayIcon, если в нем больше нет необходимости. Класс SystemTray основан на паттерне Singleton, поэтому доступ к области уведомления осуществляется с помощью статического метода getSystemTray, но для начала необходимо проверить поддерживает ли область уведомления данной платформой, проверку можно выполнить с помощью статического метода isSupported:

SystemTray tray = SystemTray.getSystemTray();

Класс TrayIcon предназначен для отображения пиктограмму в области уведомления (метод setImage). Класс может сам установить оптимальный размер иконки с помощью метода setImageAutoSize, что бывает очень полезно, т.к. не нужно заострять внимание на размере картинки. Кроме того класс TrayIcon может отображать всплывающую подсказку (метод setToolTip) и контекстное меню (метод setPopupMenu). Для установки значений можно воспользоваться конструкторами калсса:

TrayIcon(Image image)
TrayIcon(Image image, String tooltip)
TrayIcon(Image image, String tooltip, PopupMenu popup)

Конструктор класса, которые задает пиктограмму, всплывающую подстказку и контекстное меню.

Наконец, класс TrayIcon позволяет выводить уведомления с помощью метода displayMessage. Существует четыре типа уведомления
  • TrayIcon.MessageType.ERROR
  • TrayIcon.MessageType.INFO
  • TrayIcon.MessageType.NONE
  • TrayIcon.MessageType.WARNING

Код для отображения уведомления:

displayMessage("Заголовок", " Текст", TrayIcon.MessageType.INFO);

TrayIcon может быть источником событий MouseEvents, так же для объекта можно зарегистрировать обработчик ActionListener, который будет срабатывать при двойном щелчке по пиктограмме.

Теперь объединив все вышесказанное, приведу пример:

package com.blogspot.ldisplay;

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SimpleTray {

public static void main(String[] args) {
if (!SystemTray.isSupported()) {
System.err.println("System tray is not supported.");
return;
}
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("icon.png");

PopupMenu popup = new PopupMenu();
MenuItem exitItem = new MenuItem("Выход");
exitItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
popup.add(exitItem);
final TrayIcon trayIcon = new TrayIcon(image, "Всплывающая подсказка", popup);
trayIcon.setImageAutoSize(true);
trayIcon.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
trayIcon.displayMessage("Заголовок",
"Текст сообщения",
TrayIcon.MessageType.INFO);
}
});
try {
tray.add(trayIcon);
} catch (AWTException ex) {
System.err.println("TrayIcon could not be added.");
}
}
}

Напоследок две ссылки на
API по SystemTray: http://java.sun.com/javase/6/docs/api/java/awt/SystemTray.html
API по TrayIcon: http://java.sun.com/javase/6/docs/api/java/awt/TrayIcon.html.

Удаление верхней панели Blogger.com

Макет > Изменить HTML. В тег после первого комментария добавить следующие строки:

#navbar-iframe {
display: none !important;
}