Як в Java створити графічний інтерфейс Swing

У цій статті пояснюється, як створити просте додаток, що показано на малюнку праворуч, і наводиться його вихідний код.


Щоб розміщувати кнопки, текстові написи та інші компоненти у вікні програми, вам слід зрозуміти, як працює JPanel. Це щось на зразок контейнера для компонентів, який займає прямокутну область екрану і показує компоненти, вирівняні по якомусь простим принципом. Як саме вирівняні компоненти, залежить від типу схеми розміщення, яку ви встановили для панелі. Для простих завдань програмування вам слід знати, як мінімум, BorderLayout, який має в своєму розпорядженні компоненти по краях і один великий компонент ставить в середину, потім FlowLayout, який зазвичай має у своєму розпорядженні компоненти в ряд по горизонталі, і, нарешті, GridLayout, який має в своєму розпорядженні компоненти в довільній таблиці n * m. Є інші типи, але вони занадто складні для новачків. Ключова ідея в тому, що "компонентою" може бути не тільки кнопка або прапорець, а й інша JPanel. Ви можете отримати достатньо складний користувальницький інтерфейс, просто розташувавши панелі одна на інший і вибравши для них планування.


Якщо у вас є екземпляр об`єкта JPanel, викличте метод .setLayout, щоб встановити тип планування, і потім метод .add, щоб додати на панель компоненти. У разі BorderLayout в якості другого параметра вам потрібно буде передати становище. Наприклад, щоб розташувати кнопку у верхній частині, викличте myPanel.add (myButton, BorderLayout.North).


Контейнер самого високого рівня, який з`являється на екрані, що представляє додаток Java, є екземпляром JFrame, а не JPanel. Щоб додати вашу основну панель в екземпляр JFrame просто викличте myJFrame.getContentPane (). add (myJPanel, BorderLayout.Center).


Щоб змусити ваш додаток робити щось більше, ніж просто з`являтися, вам потрібно буде зрозуміти інтерфейс ActionListener. У будь-якого неабстрактне ActionListener є тільки один метод actionPerformed, який викликається, коли користувач виконує "дія" над компонентою, в якій зареєстрований слухач (наприклад, дія над кнопкою - це, очевидно, її натискання). Щоб зареєструвати слухача дій для кнопки або будь-якого іншого компонента, викличте метод .addActionListener ..




Метод 1 з 2: Створення спільного фрейма

  1. Як в Java створити графічний інтерфейс Swing

    1

    Створіть клас, який розширює клас JFrame. Цей клас буде містити всі ваші компоненти графічного інтерфейсу (GUI), такі як кнопки та текстові поля.

  2. 2

    Продумайте загальний зовнішній вигляд вашого першого додатка. Непогано було б почати з центральної панелі типу BorderLayout з іншого панеллю в нижній її частині (BorderLayout.South). Ця друга панель буде мати тип FlowLayout і містити кілька кнопок, прапорців та інших контрольних елементів. І нарешті, розташуйте великий компонент JTextArea посередині центрального компонента. Щоб взаємодіяти з користувачем за допомогою тексту, ви зможете використовувати методи getText () і setText ().

  3. Як в Java створити графічний інтерфейс Swing

    3

    Напишіть конструктор для вашого класу. Цей конструктор повинен створити всі панелі і компоненти, які ви запланували, розташувати їх правильно і додати останню панель, яка "прикріплює все" до вашого фрейму (MyFrame.getContentPane (). Add (myLargePanel, BorderLayout.Center).

  4. Як в Java створити графічний інтерфейс Swing

    4

    Напишіть метод main, який буде точкою входу програми. У цьому методі створіть екземпляр фрейма, встановіть його початкові розмір і положення (використовуйте.setSize (x, y) і .setLocation (width, height) ), І змусьте його з`явитися на екрані, викликавши .setVisible (true).

Метод 2 з 2: Програмування відповідей на дії користувача

  1. Як в Java створити графічний інтерфейс Swing

    1

    Зробіть ваш фрейм реалізує інтерфейс ActionListener. Це дозволить вашому класу "слухати" дії компонентів.

  2. Як в Java створити графічний інтерфейс Swing

    2

    Для кожної кнопки, прапорці або іншого контрольного елемента, яких ви створили, викличте метод.addActionListener, передавши ваш фрейм (this) Як параметр.

  3. 3

    Перевизначите абстрактний метод класу ActionListener, який називається actionPerformed (ActionEvent event). У цьому методі вам слід додати умовні вирази `if`, щоб перевірити, звідки прийшло подія. В цьому умовному операторі `if` має бути умова кшталт такого: "if (event.getSource () == button1) ". Тут перевіряється, звідки прийшло подія, і прийшло воно від кнопки. Усередині вираження `if` виконуйте будь-які дії, які вам необхідні при натисканні на кнопку.

    Як в Java створити графічний інтерфейс Swing

  4. Як в Java створити графічний інтерфейс Swing

    4

    У JTextArea є метод .setText ("myText"), який є непоганим способом запрограмувати якийсь видимий відповідь на ваше дію.

Поради



  • Зовсім не набагато складніше реалізувати інтерфейс MouseListener і використовувати .addMouseListener, щоб зареєструвати його для будь компоненти.
  • Якщо вам потрібно запросити від користувача ввести якусь рядок, викличте статичний метод JOptionPane.showInputDialog (this, "My message"). першим параметром має бути фрейм вашого застосування або яка-небудь панель (поле для введення з`явиться посередині батьківського елементу). Метод повертає значення, яке користувач ввів в діалоговому вікні.
  • Цілком можливо розмістити всі компоненти на одній панелі, що використовує тип GridBagLayout, але цим класом важче управляти.
  • Якщо ви хочете намалювати власні графічні об`єкти (наприклад, шахівницю), почитайте про компонент Canvas. Він може бути розміщений у вашому додатку, як будь-який інший компонент, але вам потрібно буде написати метод .paint, який повністю відповідає за його отрисовку.
  • У багатьох реальних додатках найбільш корисним компонентом Swing є JTable. Після вивчення основ, продовжуйте працювати з ним.

Попередження

  • Деякі засоби розробки пропонують можливість скласти графічний інтерфейс Swing способом, "зручним для користувача". Однак, найчастіше вони не можуть належним чином зробити панель з просунутими можливостями. Ці можливості включають дерева, таблиці, списки і комбіновані списки, які змінюють свій вміст в міру роботи програми, а також компоненти з моделями даних користувача і т.д. Код, написаний при такому "дружньому для користувача" способі, стане справжнім кошмаром, якщо вам потім буде потрібно дописати його вручну. Тому занадто не захоплюйтеся подібними "дизайнерами графічного інтерфейсу, дружніми для користувача", тому що це обмежить ваші можливості через їх обмежених можливостей.
  • Swing - це однопоточні додаток. Якщо обробка дії у вас займає надто багато часу, воно "зависне", поки не відбудеться вихід з методу .actionPerformed. Вивчайте і використовуйте многопоточность java, щоб Swing залишався "живим", поки працює якийсь трудомісткий процес.
  • Більшість методів компонентів Swing можна безпечно викликати тільки з потоку диспетчеризації подій (метод .actionPerformed та інші схожі методи слухача). Якщо вам потрібно викликати їх з якогось іншого потоку (наприклад, щоб оновити індикатор прогресу або показати результати якогось тривалого процесу), почитайте про SwingUtils.invokeLater.