Zaloguj się
Projekty Kategorie Archiwum
25 września

W poprzednim odcinku.

Tym razem wykorzystałem JLayer również do rysowania nad innym komponentem. W efekcie powstała mała klasa, która służy do zaznaczania elementów w dowolnym JTree. Kod jest dość uniwersalny, więc można łatwo dostosować do własnych potrzeb ;)

SelectionLayerUI

Poniższe demo prezentuje działanie programu:

Demo (Web Start)

Program i źródła (2 w 1)

11 września

Różne wyświetlarki plików PDF mają tzw. "tryb przeglądania", gdzie po kliknięciu myszą w środku tekstu, całą stronę można przesuwać w górę i w dół podobnie jak papier toaletowy.

Ostatnio postanowiłem (czasem jak tak siąde i myślę...) zrobić coś identycznego przy użyciu nowego komponentu javax.swing.JLayer. Cały kod ma mniej niż 60 linii, a użycie sprowadza się do new JScrollPane(new JLayer<>(editorPane, new BrowseLayerUI<>())).

Poniższe demo prezentuje działanie (lub fail) programu - trzeba kliknąć w tekst i poruszać myszą :)

Demo (Web Start)

Program i źródła (2 w 1)

9 września

Niech naszym przykładowych kodem będzie ta oto copypasta (wł. potwór spaghetti). Poniższy program wyświetla nazwy hostów z podanego pliku (funkcjonalność nie jest w tym przypadku istotna). Kod działa jak należy, ale jest trochę przydługi, a co za tym idzie - również mało czytelny* i niezrozumiały dla studentów ;). Zmieńmy to!

Czytaj dalej...

28 sierpnia

Skrypt avi2cbz.sh za pomocą mencodera i mplayera konwertuje video (avi) + napisy (txt, w formacie MicroDVD) do formatu CBZ (Comic Book Archive).

Czytaj dalej...

28 lipca

Krótka ściągawka pokazuje, co dokładnie jest zwracane przez daną metodę. A tutaj jest skrypt, który automagicznie utworzył poniższe tabelki ;)

Czytaj dalej...

17 lipca

QSS działa podobnie do CSS na stronach WWW -- pozwala w prosty sposób zmienić wygląd oraz właściwości elementów GUI.

Nowsze wersje aplikacji Qt/KDE oferują opcję linii poleceń "-stylesheet", gdzie jako parametr można podać nazwę pliku ze stylem.

Przykładowe polecenia

Uwaga: w programach KDE opcję "stylesheet" można poprzedzić jednym lub dwoma myślnikami. Inne programy Qt wymagają jednego myślnika..

  • psi -stylesheet mójstyl.css
  • konsole --stylesheet mójstyl.css

Przykładowy styl

<EXCERPT>

Czytaj dalej...

10 marca

ProgressIcon to prosta implementacja javax.swing.Icon, która oprócz zwykłego obrazka ikony, wyświetla również "pasek postępu".

Pobierz

Ikona ProgressIcon umieszczona na przycisku JButton:

Image Hosted by ImageShack.us

Kod powstał w ramach eksperymentów, więc API może być trochę niekompletne ;)

13 listopada

Przed:

...
showClose.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		JCheckBox source = (JCheckBox)e.getSource();
		closeButton.setVisible(source.isSelected());
	}
} );
...

Po:

...
showClose.onSelect(closeButton, "visible");
...

Jak widać, druga wersja jest znacznie krótsza :) Cała tajemnica tkwi w klasie EventHandler, która tworzy za nas odpowiednie zdarzenia oraz ustawia odpowiednie właściwości obiektu. Prosta implementacja klasy MyCheckBox oraz MyButton wygląda tak:

Czytaj dalej...

Na początku obrazek, żeby było wiadomo o co chodzi:

Free Image Hosting at www.ImageShack.us

Jak widać u góry mamy coś w rodzaju "kart" (JList) z ikonami oraz podpisem. Poniżej znajduje się wybrany panel (Page) z przykładowymi opcjami.

Pozioma lista

Jak powszechnie wiadomo, typowa lista składa się elementów ułożonych pionowo jeden pod drugim. Aby zmienić layout na poziomy, wystarczy ustawić właściwości layoutOrientation oraz visibleRowCount jak poniżej:

pageList = new JList(...
...
pageList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
pageList.setVisibleRowCount(1);

Renderer

Czytaj dalej...

Po JWebPane i JEditorPane przyszła kolej na Mozillę oraz IE ;)

Przykładowy kod

import javax.swing.*;

import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;

public class Test extends JFrame {

public static void main(String... args) {
	SwingUtilities.invokeLater(new Runnable() {
		public void run() {
			NativeInterface.open();
			new Test();
		}
	} );
}

private Test() {
	super("Test");
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	setSize(800, 600);
	setLocationRelativeTo(null);

	JWebBrowser browser = new JWebBrowser();
	browser.navigate("http://jogger.pl");
	add(browser);

	setVisible(true);
}

}

Czytaj dalej...

26 maja

JWebPane - "Swing compatible WebKit implementation"

To zupełnie nowy komponent bazujący na WebKit. David Qiao na swoim blogu napisał: "This is something Java/Swing community has been crying for years. (...) That’s a lightweighted Swing component for html viewing (or editing)." I wszystko jasne :)

Trochę więcej informacji można znaleźć w PDF-ie z tegoroczego JavaOne.

javax.swing.JLabel i inne

Czytaj dalej...

17 grudnia
import java.net.*;
import java.util.*;
public class Test {
	public static void main(String[] args) throws MalformedURLException {
		HashSet<URL> set = new HashSet<URL>();
		set.add(new URL("http://jogger.pl"));
		set.add(new URL("http://techblog.pl"));
		set.add(new URL("http://jogger.pl"));
		set.add(new URL("http://google.pl"));
		System.out.println(set.size());
	}
}

Jaką wartość wyświetli println na końcu programu? Jeśli myślisz że 4 lub 3, to się mylisz.. :)

Inne "ciekawostki" można obejrzeć na tej ponad godzinnej prezentacji: Advanced Topics in Programming Languages: Java Puzzlers

Generalnie można to podsumować krótko: Używaj FindBugs, żeby znaleźć wszystkie upierdliwe błędy, których normalnie byś nie zauważył :)

Parę dni temu ujawniono wielki sekret(tm). Chodzi nową i darmową (licencja LGPL) bibliotekę służącą do renderowania plików PDF - PDF Renderer. Pomimo tego, że sama biblioteka jest jeszcze w dość wczesnej (?) fazie rozwoju, to działa bardzo dobrze i szybko ;)

Więc jak użyć to API, żeby wyświetlić plik PDF w Swingu?

Czytaj dalej...

17 września

Na razie zajęło mi to z 5 minut, więc nie należy się spodziewać wielkich rewelacji. Wyświetla się informacja o ładowaniu kernela, wersja systemu, a potem panic ;) Jeśli też chcesz stworzyć swój własny OS, to zerknij na stronę projektu MikeOS (16-bit real mode operating system for x86-compatible PCs)..

Screenshot

Free Image Hosting at www.ImageShack.us

KMail potrafi zapamiętywać podane hasła w pliku ~/.kde/share/config/kmailrc. Hasła "szyfrowane" są tak, żeby na pierwszy rzut oka, nie można ich było odczytać. Zanim takie hasło zostanie zapisane na dysku, zostaniemy ostrzeżeni mniej więcej takim komunikatem: The password is stored in an obfuscated format, but should not be considered secure (...)

Tak więc spróbujmy wyświetlić wszystkie hasła KMail... Do tego, z pozoru trudnego zadania, wystarczy prosty skrypt, oraz trochę JavaScriptu (bo nie wiedziałem jak pobrać te wartości Unicode). Sam algorytm szyfrowania znalazłem w Google ;)

Czytaj dalej...

25 lipca

Dodanie obsługi OpenGL/3D za pomocą JOGL jest proste :) Wystarczy utworzyć obiekt GLCanvas, na którym wszystko jest rysowane, a następnie dodać GLEventListener. Z GLEventListener interesują nas głównie metody init, display i reshape.

  • init - wywoływane przy starcie programu

  • display - tutaj rysujemy naszego Dooma IV ;)

  • reshape - wywoływane przy starcie programu, oraz gdy zmieni się rozmiar okna

Przykładowy program

Free Image Hosting at www.ImageShack.us

Czytaj dalej...

18 marca

Na podstawie projektu Jake 2, utworzyłem nowy komponent JQuake2Panel. JQuake2Panel to po prostu zwykły JPanel z grą "w środku". Taki komponent można łatwo umieścić w dowolnym miejscu okna (np. w JToolBar, jak widać na screenshocie). Można normalnie grać, tylko obsługa myszy jakoś przestała działać ;-)

Free Image Hosting at www.ImageShack.us

Czytaj dalej...

Kategorie

Ewolucja Internetu 8 | Fail 28 | Gry 45 | Humor 124 | Idiotyzm 48 | Java 107 | KDE 83 | KShutDown 22 | Linux 81 | Makagiga 58 Ogólne 792 | Polityka 74 | Programowanie 45 | Reklamy 2 | Techblog 17 | Teorie Spiskowe 11 | TV 55 | UI 2 | Użyteczność 27 | WWW 79 | Wyrwane z Kontekstu 24 | X Files 14

Archiwum

Luty 2012 | Styczeń 2012 | Grudzień 2011 | Listopad 2011 | Październik 2011 | Wrzesień 2011 | Sierpień 2011 | Lipiec 2011 | Czerwiec 2011 | Maj 2011 | Kwiecień 2011 | Styczeń 2011 | Listopad 2010 | Październik 2010 | Wrzesień 2010 | Sierpień 2010 | Lipiec 2010 | Czerwiec 2010 | Kwiecień 2010 | Marzec 2010 | Luty 2010 | Styczeń 2010 | Grudzień 2009 | Listopad 2009 | Październik 2009 | Wrzesień 2009 | Sierpień 2009 | Lipiec 2009 | Czerwiec 2009 | Maj 2009 | Kwiecień 2009 | Marzec 2009 | Styczeń 2009 | Grudzień 2008 | Listopad 2008 | Październik 2008 | Wrzesień 2008 | Sierpień 2008 | Lipiec 2008 | Czerwiec 2008 | Maj 2008 | Kwiecień 2008 | Marzec 2008 | Luty 2008 | Styczeń 2008 | Grudzień 2007 | Listopad 2007 | Październik 2007 | Wrzesień 2007 | Sierpień 2007 | Lipiec 2007 | Czerwiec 2007 | Maj 2007 | Kwiecień 2007 | Marzec 2007 | Luty 2007 | Styczeń 2007 | Grudzień 2006 | Listopad 2006 | Październik 2006 | Wrzesień 2006 | Sierpień 2006 | Lipiec 2006 | Czerwiec 2006 | Maj 2006 | Kwiecień 2006 | Marzec 2006 | Luty 2006 | Styczeń 2006 | Grudzień 2005 | Listopad 2005 | Październik 2005 | Wrzesień 2005 | Sierpień 2005 | Lipiec 2005 | Czerwiec 2005 | Maj 2005 | Kwiecień 2005 | Marzec 2005 | Luty 2005 | Styczeń 2005