Читайте также:
|
|
package Scribble.java;import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; /** * Подкласс JFrame является простым приложением для рисования. **/public class Scribble extends JFrame { /** * Метод main() создает экземпляр класса, устанавливает размер окна * и отображает его на экране **/ public static void main(String[] args) { Scribble scribble = new Scribble(); scribble.setSize(500, 300); scribble.setVisible(true); } // Приложение использует разработанный ранее компонент ScribblePane2 ScribblePane2 scribblePane; /** * Конструктор для создания GUI приложения. **/ public Scribble() { super("Scribble"); // вызываем конструктор родительского класса // обрабатываем команду закрытия окна this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); // Все содержимое окна JFrame (кроме menubar) принадлежит // внутренней панели содержимого окна, а не окну. // То же для JDialog и остальных контейнеров. Container contentPane = this.getContentPane(); // Задаем менеджер компоновки для панели содержимого contentPane.setLayout(new BorderLayout()); // Создаем компонент главной панели для рисования, делаем // рамку, задаем цвет фона и помещаем его в панель содержимого scribblePane = new ScribblePane2(); scribblePane.setBorder(new BevelBorder(BevelBorder.LOWERED)); scribblePane.setBackground(Color.white); contentPane.add(scribblePane, BorderLayout.CENTER); // Создаем меню и помещаем его в окно. JFrame // использует специальный метод для размещения меню вне панели // содержимого. JMenuBar menubar = new JMenuBar(); // Создаем menubar this.setJMenuBar(menubar); // Отображаем его в JFrame // Создаем меню и помещаем его в menubar JMenu filemenu = new JMenu("File"); JMenu colormenu = new JMenu("Color"); menubar.add(filemenu); menubar.add(colormenu); // Создаем несколько объектов Action для работы с меню и панелью // инструментов. Action организует взаимодействие с ActionListener. // Классы Action определены как внутренние. Action clear = new ClearAction(); Action quit = new QuitAction(); Action black = new ColorAction(Color.black); Action red = new ColorAction(Color.red); Action blue = new ColorAction(Color.blue); Action select = new SelectColorAction(); // Заполняем меню объектами Action filemenu.add(clear); filemenu.add(quit); colormenu.add(black); colormenu.add(red); colormenu.add(blue); colormenu.add(select); // Создаем панель инструментов toolbar, размещаем ее JToolBar toolbar = new JToolBar(); toolbar.add(clear); toolbar.add(select); toolbar.add(quit); contentPane.add(toolbar, BorderLayout.NORTH); // Создаем еще одну панель инструментов toolbar и размещаем // ее у левого края окна. JToolBar palette = new JToolBar(); palette.add(black); palette.add(red); palette.add(blue); palette.setOrientation(SwingConstants.VERTICAL); contentPane.add(palette, BorderLayout.WEST); } /** Этот внутренний класс определяет событие очистки окна */ class ClearAction extends AbstractAction { public ClearAction() { super("Clear"); // Присваиваем имя действию } public void actionPerformed(ActionEvent e) { scribblePane.clear(); } } /** Этот внутренний класс организует выход из приложения */ class QuitAction extends AbstractAction { public QuitAction() { super("Quit"); } public void actionPerformed(ActionEvent e) { // Используем JOptionPane для подтверждения выхода int response = JOptionPane.showConfirmDialog(Scribble.this, "Уверены?"); if (response == JOptionPane.YES_OPTION) System.exit(0); } } /** * Этот внутренний класс Action определяет цвет линий компонента * ScribblePane2 в виде значков. **/ class ColorAction extends AbstractAction { Color color; public ColorAction(Color color) { this.color = color; putValue(Action.SMALL_ICON, new ColorIcon(color)); // значки } public void actionPerformed(ActionEvent e) { scribblePane.setColor(color); // Устанавливаем текущий цвет линий } } /** * Это внутренний класс реализует Icon для отображения квадрата 16x16 * заданного цвета. Значки являются экземплярами ImageIcon, но * так как используется один цвет, то реализуем собственный * тип Icon **/ static class ColorIcon implements Icon { Color color; public ColorIcon(Color color) { this.color = color; } // Эти методы определяют размеры icon public int getIconHeight() { return 16; } public int getIconWidth() { return 16; } // Этот метод изображает icon public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(color); g.fillRect(x, y, 16, 16); } } /** * Этот внутренний класс определяет Action с использованием * JColorChooser для организации выбора цвета **/ class SelectColorAction extends AbstractAction { public SelectColorAction() { super("Select Color..."); } public void actionPerformed(ActionEvent e) { Color color = JColorChooser.showDialog(Scribble.this, "Select Drawing Color", scribblePane.getColor()); if (color!= null) scribblePane.setColor(color); } }}
Дата добавления: 2015-09-11; просмотров: 66 | Поможем написать вашу работу | Нарушение авторских прав |