2009-02-05 4 views
5

Jak mogę utworzyć w interfejsie Swing przycisk przełączania obrazu? Mam dwa obrazy, imageon.jpg i imageoff.jpg, i zasadniczo potrzebuję klikalnego elementu, który przełącza obrazy i uruchamia zdarzenie.Java: obraz jako przycisk przełącznika

Aktualizacja: Czy istnieje sposób na zastąpienie zwykłego "chromu" wokół obrazu? Wolałbym prosty obraz od przycisku z obrazem w środku.

Odpowiedz

10

Załaduj obrazy za pomocą ImageIcon. Utwórz JToggleButton. Następnie zastosuj ikony z AbstractButton.setIcon/setPressedIcon/setSelectedIcon. Usuń granicę z AbstractButton.setBorderPainted(false).

+2

Mmm, zapomniałem o tych metodach. (I nie pojawiają się w Javadoc, chyba że pamiętasz, że istnieją.) +1 –

+2

Naprawdę dziwne ... próbowałem również uczynić z borderpainted fałszywą, ale nadal mam na niej obramowanie, a nie przełącznik. Jak to rozwiązać? :( – gumuruh

3

Co powiecie na JToggleButton? Możesz ją podklasować i zastąpić paint(), aby malować poprawny obraz w oparciu o to, czy jest wybrany, czy nie.

Innym sposobem jest podklasa JPanel i przechwytywanie kliknięć myszy, przesłanianie paintComponent(), aby narysować poprawny obraz. W ten sposób jedyną rzeczą, która zostanie narysowana, jest rzeczywisty obraz (w przeciwieństwie do opcji JToggleButton).

+0

Dzięki za wskazówkę JPanel! Znalazłem ten zasób, mam nadzieję, że uczy mnie budować to, czego potrzebuję: http://java.sun.com/docs/books/tutorial/uiswing/painting/index.html – Dan

1

Najlepiej jest podklasować AbstractButton i ustawić właściwości, takie jak obramowanie i tło (w swoim konstruktorze).

MyButton() { 
    setBorder(null); 
    setBackground(null); 
    } 
2

Miałem ten sam problem z JButtons. Wypróbuj to:

result = new JButton(icon); 
result.setBorderPainted(false); 
result.setContentAreaFilled(false); 

width = icon.getIconWidth(); 
height = icon.getIconHeight(); 
result.setPreferredSize(new Dimension(width, height)); 

Konieczne jest ustawienie preferowanego rozmiaru, aby pozbyć się dodatkowej przestrzeni wokół przycisku. To działało dla mnie na Windows 7 i Mac OS X 10.6.