WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Использование CardLayout

Использование CardLayout


Дата публикации: 17-03-2013

Многие из нас сталкивались с использованием средств управления табуляцией. Они очень популярны в том случае, когда вы распределяете GUI по различным разделам для сохранения экранных пробелов. Они также делают удобным использование программы, так как пользователь может работать на специфическом разделе без переполнения числом компонентов.

Java предоставляет java.awt.CardLayout для обеспечения этого требования. Как показывает имя, CardLayout осуществляет деление контейнера на множественные карты. Одновременно показывается только одна карта. Вы можете программно управлять перетасовыванием карт. Каждая карта представляет компонент, то есть одновременно показывается один компонент.

CardLayout вычисляет привилегированный размер, находя максимум привилегированной ширины и высоты содержащихся компонентов. Обратите внимание, что он может получать максимум привилегированной ширины от одного компонента и максимум привилегированной высоты от другого. Чтобы добавить компонент к CardLayout, вы должны использовать один из следующих методов:

- add(Component component, String key)
- add(String key, Component component)
- add(String key, Component component, int index)
Первые два метода добавляют компонент к списку компонентов для контейнера. Последний метод используется для добавления компонента в специфической позиции в контейнере. Для каждого компонента должна использоваться уникальная клавиша.
Давайте рассмотрим код.

import java.awt.*;
import java.awt.event.*;

/** Demonstrates the use of CardLayout. */
public class CardLayoutDemo extends Frame implements ActionListener {

/** The key for the properties tab. */
public final static String PROPERTIES_TAB = "Properties";
/** The key for the help tab. */
public final static String HELP_TAB = "Help";
/** The panel to hold the tabs. */
private Panel tabPanel;
/** The layout for the tabs panel. */
private CardLayout tabs;

/** Initializes the demo. */
public CardLayoutDemo() {
super("Card Layout Demo");
// Initialize
init();
}

/** Initializes the UI. */
public void init() {

// Set the layout
setLayout(new BorderLayout());

// Panel to hold the tab buttons
Panel buttonPanel = new Panel(new FlowLayout(FlowLayout.LEFT));

// Add buttons to the panel
Button props = new Button(PROPERTIES_TAB);
Button help = new Button(HELP_TAB);
buttonPanel.add(props);
buttonPanel.add(help);

// Add listener for the tabs
props.addActionListener(this);
help.addActionListener(this);

// Panel to hold the tabs
tabs = new CardLayout();
tabPanel = new Panel(tabs);

// The properties tab
Panel propsTab = new Panel(new FlowLayout());
propsTab.add(new Label("Log file: "), BorderLayout.WEST);
propsTab.add(new TextField("", 20), BorderLayout.CENTER);

// The help tab
Panel helpTab = new Panel(new BorderLayout());
helpTab.add(new TextArea("This is card layout demo."),
BorderLayout.CENTER);

// Add tabs to the tabs panel
tabPanel.add(PROPERTIES_TAB, propsTab);
tabPanel.add(HELP_TAB, helpTab);

// Add the panels to the frame
add(buttonPanel, BorderLayout.NORTH);
add(tabPanel, BorderLayout.CENTER);

// Do the layout
pack();

// Show
setVisible(true);

}

/** Handles the tab button clicks. */
public void actionPerformed(ActionEvent ae) {
// Show the corresponding tab
tabs.show(tabPanel, ae.getActionCommand());
}

/** Main. */
public static void main(String[] args) {
CardLayoutDemo cld = new CardLayoutDemo();
}
}
Это приложение формирует простой диалог, который использует 2 табуляции - одну для редактирования/показа свойства и другую для показа справки. Хотя это приложение очень простое, оно показывает мощность CardLayout, а также то, как комбинация различных диспетчеров размещения может создавать мощный GUI.
Метод main() просто создает образец класса. Конструктор устанавливает заголовок приложения и вызывает метод init(), который осуществляет инициализацию GUI. Во-первых, он устанавливает размещение фрейма в BorderLayout. Это облегчает показ кнопок для каждой табуляции сверху и табуляции в центре. Кнопки добавляются к панели с помощью FlowLayout диспетчера. Текст кнопки - это тоже самое, что и клавиша для соответствующей табуляции. Каждая кнопка имеет ActionListener, который добавляется к ней. В обработчике actionPerformed() мы показываем табуляцию, у которой клавиша соответствует имени кнопки. Так, если вы нажимаете на кнопку "Help", он покажет табуляцию справки.

Для каждой табуляции, он создает панель и добавляет компоненты. Например, он создает "propsTab" для показа свойств, добавляет метку и текстовое поле для регистрационного файла. Обратите внимание, что размещение для панели табуляции устанавливается в CardLayout, так как он является табуляциями, которые организовываются как карты. Метод Init() в конце добавляет панель кнопок и панель табуляций к фрейму, а затем показывает его.

Диспетчер CardLayout также позволяет вам обходить карты различными способами. Например, вы можете переходить либо к предыдущей карте, либо к следующей. Как вы можете видеть, CardLayout помогает вам организовать GUI в картах. А объединяя это свойство с другими диспетчерами размещения вы можете действительно создавать гибкий и красивый GUI.

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Март 2017 (1)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта

Хотите продать свой сайт?
- Мы быстро и удобно для Вас сможем его купить:
  • Заявка на продажу сайта
  • Раcсматриваем цены на каждый сайт в индивидуальном порядке.

    Случайная цитата

    Cory Dodt:

    "Если называть Python заменой BASIC, то тогда и трансформер Optimus Prime — это только замена грузовика."

    Опрос

    Какой браузер Вы используете?

    Internet Explorer
    Google Chrome
    Mozilla Firefox
    Netscape Navigator
    Maxthon Browser
    Opera
    Mozilla Suite
    SeaMonkey
    K-Meleon
    Safari
    Amaya
    Avant Browser
    SlimBrowser
    Другой...