Источник статьи: Компьютерный энтузиаст Автор: Чжан Цзянь
Кто знает, сколько песка и камня было использовано для строительства Вавилонской башни? Кто знает, сколько дней и ночей потребовалось, чтобы построить Рим? Единственное, что мы знаем, это то, что без кирпичей и камней не было бы Великой стены, протянувшейся на тысячи миль, без скопления валунов и глины, не было бы вечных пирамид; Видно, что подготовка базовых знаний имеет решающее значение для изучения чего-либо. Итак, давайте начнем с понимания некоторых основных функций Swing и начнем наш великий проект по созданию Рима!
Предисловие
Java Cafe работает уже давно. Если вам уже нравится вкус чашки кофе Java, не забывайте заходить сюда почаще. На этот раз мы приготовили для всех большую чашку ароматного кофе — на основе разработки игры «Lianliankan» мы вместе с вами научимся использовать Swing на Java. Внимательно попробовав эту чашку кофе, вы поймете. обнаружил, что Java не только придает моей чашке кофе уникальный вкус, но и научился разрабатывать профессиональные игры. Это действительно лучшее из обоих миров!
Чтобы дать вам представление, на картинке ниже представлен скриншот игры. Вы можете скачать игру, чтобы опробовать (загрузить игровую программу; загрузить исходный файл), а затем использовать java -jar kyodai.jar, чтобы запустить ее в режиме командной строки. Кроме того, вы также можете зайти на мою домашнюю страницу http://www.ismyway.com, чтобы загрузить автономную и мобильную версию этой игры для пробной игры (см. рисунок 1).
Java Cafe уже знакомил вас с AWT, так в чем же разница между Swing и AWT? Любой, кто изучает Java, возможно, слышал или видел термины «тяжелые элементы управления» и «облегченные элементы управления» — это то, что мы обычно называем «тяжелыми элементами управления», а Swing — это «легкие элементы управления». Мы все знаем, что лозунг Java — «напиши один раз, работай где угодно», что также требует, чтобы мы как можно чаще использовали чистый код Java в наших программах. К сожалению, AWT использует интерфейс с собственной платформой, поэтому интерфейсы, созданные с помощью AWT, могут немного отличаться в разных операционных системах. Swing совершенно другой. Swing написан на чистом Java. Поэтому интерфейс, написанный на Swing, может обеспечить одинаковый внешний вид на всех платформах. Вот еще один трюк: в JDK для облегчения различения все элементы управления Swing начинаются с заглавной буквы J, например JButton (соответствующий эквивалент в AWT — Button), так что вы можете легко отличить элементы управления Swing от элементов управления AWT.
Качаем первый опыт
Для тех, кто хочет научиться программированию на Swing, мы специально подготовили несколько советов. Во-первых, крайне необходимо скачать и прочитать код. Поскольку это руководство по Swing, мы пытаемся как можно подробнее объяснить некоторый контент, связанный со Swing. Содержимое, не связанное с Swing, обычно не рассматривается, например, часть алгоритма. Во-вторых, из-за ограниченности места здесь невозможно написать каждую часть кода полностью, поэтому нужно еще и сравнить ее с полным кодом. Наконец, чтобы всем было проще сосредоточиться на изучении Swing, мы также поместили в загружаемый файл ресурсы, необходимые для разработки игры. После загрузки вы можете скомпилировать и запустить его и увидеть результаты выполнения.
1. Контейнер верхнего уровня
Что такое контейнер верхнего уровня? Когда мы используем Java для графического программирования, где рисуются диаграммы? Нам нужен контейнер, который может обеспечивать рисование графики. Этот контейнер называется контейнером верхнего уровня. Его также можно рассматривать как окно. Контейнер верхнего уровня является основой для графического программирования. Все графические элементы должны быть включены в контейнер верхнего уровня. В Swing у нас есть три контейнера верхнего уровня, которые можно использовать:
・JFrame: используется для разработки приложений, похожих на оконную форму в системах Windows.
・JDialog: аналогичен JFrame, за исключением того, что JDialog используется для создания диалоговых окон.
・JApplet: используется для разработки Java-апплетов, которые можно встраивать в веб-страницы.
Если нам нужно использовать Swing для создания программы класса окна, наш код должен выглядеть так:
импортировать javax.swing.*;
публичный класс KyodaiUI
расширяет JFrame {
…
}
2. Элементы управления
Элементы управления — это основные элементы, составляющие интерфейс приложения. Кнопки, текстовые поля, индикаторы выполнения и т. д. — все это элементы управления. Элементы управления (здесь мы обсуждаем только визуальные элементы управления) можно разделить на контейнерные и неконтейнерные. В буквальном смысле элемент управления-контейнер — это специальный элемент управления, который может содержать другие элементы управления. Например, элемент управления JPanel в Java — это элемент управления-контейнер. В JPanel можно размещать неконтейнерные элементы управления, такие как кнопки и текстовые поля. -контейнерные элементы управления, такие как кнопки и текстовые поля в JPanel. Поместите в него несколько элементов управления JPanel (стоит отметить, что контейнер верхнего уровня также является элементом управления типа контейнера. Каждое оконное приложение имеет и может иметь только один контейнер верхнего уровня). Другими словами, контейнер верхнего уровня не может быть включен в другие элементы управления).
В Java существует множество контейнерных элементов управления. Помимо только что упомянутого JPanel, существуют также JTabbedPane, JScrollPane и т. д. К неконтейнерным элементам управления относятся JButton, JLabel, JTextField и т. д. Если вам нужно добавить элемент управления к элементу управления типа контейнера, вы можете использовать для этого метод add(Component comp), например:
Панель JPanel = новая JPanel();
Кнопка JButton = новая JButton();
панель.добавить(кнопка);
3. Планировка
Что такое макет? Layout — это система управления интерфейсом, используемая в Java для управления расположением и положением элементов управления. Люди, которые использовали другие языки разработки визуального программирования, всегда будут чувствовать, что дизайн интерфейса Java неудобен при первом контакте с ним: не существует метода WYSIWYG для установки координат управления! Однако оказывается, что система управления макетом, предоставляемая самой Java, также может хорошо удовлетворить наши потребности и имеет больше преимуществ в кроссплатформенной производительности.
Обычно используемые макеты:
・BorderLayout: система управления, которая делит интерфейс на верхнюю, нижнюю, левую, правую и среднюю области. В макете BorderLayout можно разместить не более 5 элементов управления. Если элементов управления более 5, рекомендуется использовать. другие системы компоновки.
・GridLayout: GridLayout — это система управления макетом, которая превращает пользовательский интерфейс в макет, напоминающий шахматную доску. Если мы хотим разработать программу-калькулятор, аналогичную той, которая поставляется с Windows, GridLayout, несомненно, будет лучшим выбором.
・FlowLayout: FlowLayout отличается от двух вышеупомянутых типов систем управления макетом. В FlowLayout вам не нужно указывать, где разместить каждый элемент управления. Вам нужно только добавить элементы управления в FlowLayout, и FlowLayout разместит их в соответствии с порядком. порядок добавления элементов управления. Элемент управления автоматически переносится, если недостаточно места.
Получив базовое представление об этих системах управления макетом, давайте вместе займемся дизайном интерфейса. Внимательно просмотрев настройки «Lianliankan» в играх QQ, мы можем обнаружить, что весь интерфейс разделен на три области: верхняя часть — это область системного меню, самая большая область — область пользовательской игры, а также взаимодействие с пользователем. Область. Каждая область состоит из нескольких элементов управления.
С таким большим количеством элементов управления, с чего нам начать? Поскольку другие элементы управления могут быть помещены в элемент управления-контейнер, нам нужно только определить элемент управления-контейнер, который нужно разместить первым. Теперь, когда мы знаем количество элементов управления контейнером, которые нам нужно использовать, давайте перейдем к выбору системы управления макетом. Использовать GridLayout? Использование FlowLayout кажется немного вынужденным? Есть ли лучший вариант? Кстати, я думаю, вы наверняка подумали о BorderLayout, как показано на рисунке 2 ниже.
Прежде чем приступить к работе, каждый должен обратить внимание на то, что при проектировании интерфейса сначала необходимо учитывать размер, будь то размер основного интерфейса программы или размер каждой области. Если соответствующий размер не спроектирован, он будет очень большим. больно менять это в будущем.
Ниже приведена соответствующая исходная программа:
импортировать java.awt.*;
импортировать javax.swing.*;
публичный класс KyodaiUI расширяет JFrame {
общественный KyodaUI() {
this.setSize(780, 500); //Установим размер формы 780*500;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false); //Размер формы изменить нельзя
this.setTitle("Lianliankan"); //Установим заголовок
JPanel ToolBar = новый JPanel();
ToolBar.setBackground(Color.white);
toolBar.setPreferredSize(новое измерение(780, 48));
JPanel actionPanel = new JPanel(); //Создаем новый элемент управления типа JPanel.
actionPanel.setBackground(Color.yellow); //Устанавливаем цвет фона
actionPanel.setPreferredSize(new Dimension(160, 380)); //Установим размер
JPanel contentPanel = новый JPanel();
contentPanel.setBackground(Color.blue);
contentPanel.setPreferredSize(new Dimension(620, 380));
this.getContentPane().add(toolBar, BorderLayout.NORTH);
this.getContentPane().add(actionPanel, BorderLayout.EAST);
this.getContentPane().add(contentPanel, BorderLayout.CENTER);
}
public static void main(String[] args) выдает HeadlessException {
KyodaiUI kyodaiUI = новый KyodaiUI();
kyodaiUI.show();
}
}
Давайте посмотрим, как работает вышеуказанная программа. Прежде всего, расширение JFrame указывает, что оно унаследовано от JFrame, который является самым основным элементом управления контейнером верхнего уровня. Фактически, в JDK элементы управления, начинающиеся с буквы J, являются элементами управления Swing. Затем установите свойства контейнера. Среди них setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) используется, чтобы указать виртуальной машине Java закрыть оконный процесс, когда пользователь нажимает кнопку «Закрыть» в правом верхнем углу формы. Если вы этого не сделаете, вы обнаружите, что, хотя вы можете нажать, чтобы закрыть окно, программа не закроется. В следующем коде мы добавляем три контейнера Panel в контейнер верхнего уровня. Следует отметить, что в AWT мы можем напрямую записать это как add(toolBar, BorderLayout.NORTH), но в Swing это нужно записать как getContentPane() add(toolBar, BorderLayout.NORTH), иначе программа запустится. неправильный.
Теперь вы можете скомпилировать и запустить его, чтобы проверить, совпадает ли он с моим результатом работы (см. рис. 3)?
4. Граница
Хотя мы используем разные цвета переднего плана для выделения разных областей, нет ощущения иерархии. С границей будет намного красивее.
В Java все элементы управления Swing, начинающиеся с J, могут использовать метод setBorder для установки границ для себя. Существует множество видов границ: линейные, выпуклые, вогнутые и пустые. Вы даже можете свободно комбинировать их, чтобы сформировать свой собственный стиль. Все границы должны быть созданы с использованием статических методов, предусмотренных в javax.swing.BorderFactory, например:
Граница границы = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
новыйЦвет(45, 92, 162),
новыйЦвет(43, 66, 97),
новыйЦвет(45, 92, 162),
новый цвет(84, 123, 200));
Теперь меняемtoolBar.setBackground(Color.white) наtoolBar.setBorder(border). Трехмерный эффект уже появился?
Практический бой – напиши свое имя
Теперь у нас есть работающий интерфейс. Хотя он ничего не может сделать, не паникуйте, Рим был построен не за один день.
Теперь давайте добавим в область меню меню «О программе», чтобы отображать информацию о программе. Разве вы не хотите, чтобы другие знали ваше имя? Сам Swing предоставляет готовую кнопку управления JButton. Нам нужно только создать новую кнопку: JButton about = new JButton("about"); Как разместить эту кнопку в области меню, а не в другом месте? Мы можем добавить следующий код:toolBar.add(about); Эй, почему нет ответа при нажатии кнопки? Это потому, что вы не указали программе, что делать, когда вы нажимаете кнопку. Чтобы добавить ответ на событие для кнопки, вам сначала нужно использовать about.addActionListener(this), чтобы сообщить программе, что она должна прослушивать события при нажатии кнопки. Поскольку ActionListener — это программный интерфейс, нам также нужно кое-что сделать. объявление класса. Модификация: общедоступный класс KyodaiUI расширяет JFrame реализует ActionListener {...} Цель реализации интерфейса ActionListener — сообщить программе, что я хочу обрабатывать события. Конечно, наконец, нам нужно добавить код для реагирования на событие:
общественный недействительный actionPerformed (ActionEvent e) {
if (e.getSource() == около) {
JOptionPane.showMessageDialog(это, «Мое имя», «О программе»,
JOptionPane.INFORMATION_MESSAGE);
возвращаться ;
}
}
Среди них e.getSource() представляет собой элемент управления, который в данный момент вызывает событие. Поскольку в нашей программе часто имеется более одного элемента управления, эти элементы управления могут генерировать события, поэтому мы должны использовать этот метод, чтобы найти элемент управления, сгенерировавший событие.
краткое содержание
Давайте повторим то, что мы узнали сегодня: во-первых, мы понимаем контейнер верхнего уровня, а также знаем, что элементы управления делятся на контейнерные и неконтейнерные. Мы также знаем, как использовать границы. Наконец, мы также разобрались с кнопками. небольшое событие.
Само собой разумеется, что вы учитесь и практикуетесь по ходу дела, поэтому позвольте мне оставить вам небольшое домашнее задание, которое поможет вам закрепить то, что вы узнали сегодня: кнопка, которую мы добавили выше, находится в середине строки меню и некрасива. Пожалуйста, поместите его. Попробуйте слева или справа.
Наконец, я хотел бы предоставить вам несколько лучших справочных материалов:
●Создание графического интерфейса с помощью JFC/Swing.
http://java.sun.com/docs/books/tutorial/uiswing/index.html
●2D-графика
http://java.sun.com/docs/books/tutorial/2d/index.html
●JDK API.
http://java.sun.com/j2se/1.4.2/docs/api/index.html