import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class PictureButton { public static void main(String[] args) { ButtonFrame frame = new ButtonFrame(); frame.setSize(300, 100); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class ButtonFrame extends JFrame{ JLabel label=new JLabel(); int i=0; ButtonFrame(){ Icon icon = new ImageIcon("icon.gif"); JButton button = new JButton(icon); // додаємо обробник подій, що визначається у внутрішньому класі button.addActionListener(new ActionListener( ) { public void actionPerformed(ActionEvent ae) { i++; label.setText("Натиснуто разів: "+ i); } }); //встанолюємо менеджер розташування setLayout(new FlowLayout( )); add(button); add(label); } }
Якщо ми не використовуємо панелі, то при розміщенні компонентів напряму у фрейм необхідно встановити менеджер розташування, який керує розміщенням елементів один відносно одного (дивіться розділ про менеджери розташування). JFrame немає менеджера розташування по замовчуванню. У JPanel використовується по замовчуванню FlowLayout. Це найпростіший менеджер, який розміщує компоненти один за одним.
Необхідно зазначити, що при натисненні кнопки чи іншого компонента в джава генерується відповідний рядок «діюча команда» чи по іншому «команда дії» (action command). Це просто рядок (String), що дозволяє ідентифікувати компонент, що надсилає подію. По замовчуванню у JButton діюча команда та ж, що і мітка кнопки.
Щоб отримати діючу команду з події, необхідно викликати метод getActionCommand() для відповідної події. Наступний код визначає чи натиснута клавіша Yes:
public void actionPerformed(ActionEvent e){ if (e.getActionCommand( ).equals("Yes") { //the user pressed "Yes"; do something ... } }Можна змінити діючу команду викликавши метод кнопки setActionCommand(). Наступний рядок змінює команду на «confirm»:
myButton.setActionCommand("confirm");Використання для кнопок відмінних від їхніх міток діючих команд дозволяє полегшити інтернаціоналізацію інтерфейсу команд. Тобто переведення інтерфейсу з однієї мови на іншу. Так назви кнопок можуть бути записані у файл, який запросто може модифікуватися і його зміна не призведе до необхідності переписування коду програми. Таким чином перекладом інтерфейсу на іншу мову можуть здійснювати і непрограмісти.
Як і у компонента JLabel, написи у JButton можна задавати за допомогою HTML:
JButton htmlButton = new JButton( "<html>"
+ "В<font size=-1>икористовуємо<font size=+0> "
+ "<br> HTML ");
Повний варіант книги знаходиться на Вікіпідручнику