Національний технічний університет України
«Київський політехнічний інститут ім. Ігоря Сікорського»
Кафедра цифрових технологій в енергетиці
ЗВІТ з виконання лабораторної роботи №7з дисципліни «Програмування на мові Java»
«ПОБУДОВА ГРАФІЧНИХ ІНТЕРФЕЙСІВ ЗА ДОПОМОГОЮ ІНСТРУМЕНТІВ SWING»
Варіант 13
Завдання 2
package org.example;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/** Цей клас є головним вікном програми для малювання заокруглених прямокутників. Він дозволяє користувачам вибрати колір та розміри заокруглення, і відображає заокруглений прямокутник на панелі малювання. */public class Task2 extends JFrame { private JComboBox<String> colorComboBox; private static JSpinner widthSpinner; private static JSpinner heightSpinner; /** Конструктор */ public Task2() { setTitle("Rounded Rectangle App"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); setSize(700, 500); DrawPanel drawPanel = new DrawPanel(); add(drawPanel, BorderLayout.CENTER); JPanel bottomPanel = new JPanel(new FlowLayout()); String[] colors = {"Чорний", "Червоний", "Зелений", "Синій"}; colorComboBox = new JComboBox<>(colors); bottomPanel.add(new JLabel("Колір:")); bottomPanel.add(colorComboBox); widthSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 30, 1)); bottomPanel.add(new JLabel("Ширина закруглення:")); bottomPanel.add(widthSpinner); heightSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 30, 1)); bottomPanel.add(new JLabel("Висота закруглення:")); bottomPanel.add(heightSpinner); JButton changeButton = new JButton("Змінити прямокутник"); changeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { drawPanel.changeRectangle(); } }); bottomPanel.add(changeButton); add(bottomPanel, BorderLayout.SOUTH); setLocationRelativeTo(null); setVisible(true); } /** Панель, на якій малюється заокруглений прямокутник. */ public static class DrawPanel extends JPanel { public ComboBoxModel<Object> colorComboBox; Color rectangleColor = Color.BLACK; private int cornerWidth = 0; private int cornerHeight = 0; @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setColor(rectangleColor); g2d.fillRoundRect(50, 50, 200, 100, cornerWidth, cornerHeight); } public void changeRectangle() { String selectedColor = (String) colorComboBox.getSelectedItem(); rectangleColor = getColorFromString(selectedColor); cornerWidth = (int) widthSpinner.getValue(); cornerHeight = (int) heightSpinner.getValue(); repaint(); } Color getColorFromString(String colorName) { switch (colorName) { case "Чорний": return Color.BLACK; case "Червоний": return Color.RED; case "Зелений": return Color.GREEN; case "Синій": return Color.BLUE; default: return Color.BLACK; } } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new Task2()); }}
/
Тести:
package org.example;import org.junit.jupiter.api.Test;import org.example.Task2;import javax.swing.*;import java.awt.*;import static org.junit.jupiter.api.Assertions.*;class Task2Test { @Test public void test_drawPanel_getColorFromString() { Task2.DrawPanel panel = new Task2.DrawPanel(); assertEquals(Color.BLACK, panel.getColorFromString("Чорний")); assertEquals(Color.RED, panel.getColorFromString("Червоний")); assertEquals(Color.GREEN, panel.getColorFromString("Зелений")); assertEquals(Color.BLUE, panel.getColorFromString("Синій")); assertEquals(Color.BLACK, panel.getColorFromString("Invalid color")); }}
/
Завдання 14
package org.example;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/** * Клас Task14 представляє простий додаток для малювання трикутників. * Додаток дозволяє користувачам вводити координати трьох точок трикутника та відображати * намальований трикутник на графічному інтерфейсі. */public class Task14 extends JFrame { JSpinner x1Spinner; JSpinner y1Spinner; JSpinner x2Spinner; JSpinner y2Spinner; JSpinner x3Spinner; JSpinner y3Spinner; private JPanel bottomPanel; JButton drawButton; /** * Конструктор */ public Task14() { setTitle("Triangle Drawing App"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); JPanel topPanel = new JPanel(new FlowLayout()); topPanel.add(new JLabel("X1:")); x1Spinner = createSpinner(); topPanel.add(x1Spinner); topPanel.add(new JLabel("Y1:")); y1Spinner = createSpinner(); topPanel.add(y1Spinner); topPanel.add(new JLabel("X2:")); x2Spinner = createSpinner(); topPanel.add(x2Spinner); topPanel.add(new JLabel("Y2:")); y2Spinner = createSpinner(); topPanel.add(y2Spinner); topPanel.add(new JLabel("X3:")); x3Spinner = createSpinner(); topPanel.add(x3Spinner); topPanel.add(new JLabel("Y3:")); y3Spinner = createSpinner(); topPanel.add(y3Spinner); drawButton = new JButton("Вивести трикутник"); drawButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { drawTriangle(); } }); topPanel.add(drawButton); add(topPanel, BorderLayout.NORTH); bottomPanel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); drawTriangle(); } }; bottomPanel.setPreferredSize(new Dimension(400, 400)); add(bottomPanel, BorderLayout.CENTER); pack(); setLocationRelativeTo(null); setVisible(true); } private JSpinner createSpinner() { SpinnerModel spinnerModel = new SpinnerNumberModel(0, 0, 100, 1); return new JSpinner(spinnerModel); } /** * Малює трикутник на панелі, використовуючи введені користувачем координати. */ private void drawTriangle() { int x1 = (int) x1Spinner.getValue(); int y1 = (int) y1Spinner.getValue(); int x2 = (int) x2Spinner.getValue(); int y2 = (int) y2Spinner.getValue(); int x3 = (int) x3Spinner.getValue(); int y3 = (int) y3Spinner.getValue(); Graphics g = bottomPanel.getGraphics(); drawTriangle(g, x1, y1, x2, y2, x3, y3); } private void drawTriangle(Graphics g, int x1, int y1, int x2, int y2, int x3, int y3) { Graphics2D g2d = (Graphics2D) g; g2d.setColor(Color.BLACK); int[] xPoints = {x1, x2, x3}; int[] yPoints = {y1, y2, y3}; g2d.fillPolygon(xPoints, yPoints, 3); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new Task14()); }}
/
Тести:
package org.example;import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;class Task14Test { @Test public void testValidInput() { Task14 app = new Task14(); app.x1Spinner.setValue(50); app.y1Spinner.setValue(75); assertEquals(50, app.x1Spinner.getValue()); assertEquals(75, app.y1Spinner.getValue()); } @Test public void testInvalidInput() { Task14 app = new Task14(); app.x2Spinner.setValue(-10); assertEquals(-10, app.x2Spinner.getValue()); } @Test public void testDrawTriangleButton() { Task14 app = new Task14(); app.drawButton.doClick(); } @Test public void testDrawTriangleCoordinates() { Task14 app = new Task14(); app.x1Spinner.setValue(20); app.y1Spinner.setValue(30); app.x2Spinner.setValue(50); app.y2Spinner.setValue(60); app.x3Spinner.setValue(40); app.y3Spinner.setValue(20); app.drawButton.doClick(); }}
/
Завдання 21
package org.example;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/** * Клас Task21 представляє додаток для відображення тексту з вказаними * параметрами, такими як шрифт, колір та текстовий рядок. */public class Task21 extends JFrame { private JTextField textField; private JComboBox<String> fontComboBox; private JComboBox<String> colorComboBox; private JPanel outputPanel; /** * Конструктор */ public Task21() { setTitle("String Output App"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); createControlPanel(); createOutputPanel(); pack(); setLocationRelativeTo(null); setVisible(true); } /** * Створює панель управління з елементами для вводу тексту, вибору шрифту та кольору. */ private void createControlPanel() { JPanel controlPanel = new JPanel(new FlowLayout()); JLabel textLabel = new JLabel("Text:"); textField = new JTextField(15); JLabel fontLabel = new JLabel("Font:"); String[] fontOptions = {"Times New Roman", "Arial", "Verdana"}; fontComboBox = new JComboBox<>(fontOptions); JLabel colorLabel = new JLabel("Color:"); String[] colorOptions = {"Black", "Red", "Green", "Blue"}; colorComboBox = new JComboBox<>(colorOptions); JButton outputButton = new JButton("Output String"); outputButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { outputString(); } }); controlPanel.add(textLabel); controlPanel.add(textField); controlPanel.add(fontLabel); controlPanel.add(fontComboBox); controlPanel.add(colorLabel); controlPanel.add(colorComboBox); controlPanel.add(outputButton); add(controlPanel, BorderLayout.NORTH); } private void createOutputPanel() { outputPanel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); drawString(g); } }; outputPanel.setPreferredSize(new Dimension(400, 200)); outputPanel.setBackground(Color.WHITE); add(outputPanel, BorderLayout.CENTER); } /** * Малює вказаний текст на графічному контексті враховуючи вибрані параметри. * * @param g Графічний контекст для малювання. */ private void drawString(Graphics g) { String text = textField.getText(); String fontName = fontComboBox.getSelectedItem().toString(); int fontStyle = Font.PLAIN; int fontSize = 20; switch (colorComboBox.getSelectedItem().toString()) { case "Black": g.setColor(Color.BLACK); break; case "Red": g.setColor(Color.RED); break; case "Green": g.setColor(Color.GREEN); break; case "Blue": g.setColor(Color.BLUE); break; default: g.setColor(Color.BLACK); break; } Font font = new Font(fontName, fontStyle, fontSize); g.setFont(font); g.drawString(text, 50, 100); } private void outputString() { outputPanel.repaint(); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new Task21()); }}
/
Тести:
package org.example;import org.junit.jupiter.api.Test;import javax.swing.*;import java.awt.*;import static org.junit.jupiter.api.Assertions.*;class Task21Test { @Test public void testConstructor() { Task21 frame = new Task21(); assertEquals("String Output App", frame.getTitle()); assertEquals(JFrame.EXIT_ON_CLOSE, frame.getDefaultCloseOperation()); assertEquals(BorderLayout.class, frame.getLayout().getClass()); }}
/
Завдання 28
package org.example;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/** * Клас Task28 представляє вікно з програмою для переміщення прямокутника та зміни його кольору. */public class Task28 extends JFrame { JPanel drawPanel; JComboBox<String> colorComboBox; JRadioButton leftRadioButton; JRadioButton upRadioButton; JRadioButton rightRadioButton; JRadioButton downRadioButton; int rectangleX = 150; int rectangleY = 150; Color rectangleColor = Color.BLACK; /** * Конструктор */ public Task28() { setTitle("Move Rectangle App"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); createOutputPanel(); createControlPanel(); pack(); setLocationRelativeTo(null); setVisible(true); } private void createOutputPanel() { drawPanel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); drawRectangle(g); } }; drawPanel.setPreferredSize(new Dimension(300, 300)); drawPanel.setBackground(Color.WHITE); add(drawPanel, BorderLayout.CENTER); } /** * Малює прямокутник на панелі. * * @param g Об'єкт Graphics для малювання. */ private void drawRectangle(Graphics g) { g.setColor(rectangleColor); g.fillRect(rectangleX, rectangleY, 50, 50); } private void createControlPanel() { JPanel controlPanel = new JPanel(new FlowLayout()); JLabel colorLabel = new JLabel("Color:"); String[] colorOptions = {"Black", "Red", "Green", "Blue"}; colorComboBox = new JComboBox<>(colorOptions); colorComboBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { changeColor(); } }); leftRadioButton = new JRadioButton("Left"); upRadioButton = new JRadioButton("Up"); rightRadioButton = new JRadioButton("Right"); downRadioButton = new JRadioButton("Down"); ButtonGroup directionGroup = new ButtonGroup(); directionGroup.add(leftRadioButton); directionGroup.add(upRadioButton); directionGroup.add(rightRadioButton); directionGroup.add(downRadioButton); JButton moveButton = new JButton("Move"); moveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { moveRectangle(); } }); controlPanel.add(colorLabel); controlPanel.add(colorComboBox); controlPanel.add(leftRadioButton); controlPanel.add(upRadioButton); controlPanel.add(rightRadioButton); controlPanel.add(downRadioButton); controlPanel.add(moveButton); add(controlPanel, BorderLayout.SOUTH); } /** * Змінює колір прямокутника відповідно до вибору користувача у комбобоксі. */ void changeColor() { String selectedColor = colorComboBox.getSelectedItem().toString(); switch (selectedColor) { case "Black": rectangleColor = Color.BLACK; break; case "Red": rectangleColor = Color.RED; break; case "Green": rectangleColor = Color.GREEN; break; case "Blue": rectangleColor = Color.BLUE; break; } drawPanel.repaint(); } /** * Зміщує прямокутник у вибраному напрямку. */ void moveRectangle() { if (leftRadioButton.isSelected()) { rectangleX -= 10; } else if (upRadioButton.isSelected()) { rectangleY -= 10; } else if (rightRadioButton.isSelected()) { rectangleX += 10; } else if (downRadioButton.isSelected()) { rectangleY += 10; } drawPanel.repaint(); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new Task28()); }}
/
Тести:
package org.example;import org.junit.jupiter.api.Test;import java.awt.*;import static org.junit.jupiter.api.Assertions.*;class Task28Test { @Test public void testDrawPanelBackground() { Task28 app = new Task28(); assertEquals(Color.WHITE, app.drawPanel.getBackground()); } @Test public void testDrawRectangleInitialColor() { Task28 app = new Task28(); assertEquals(Color.BLACK, app.rectangleColor); } @Test public void testDrawRectangleColorChange() { Task28 app = new Task28(); app.colorComboBox.setSelectedIndex(1); // Select Red app.changeColor(); assertEquals(Color.RED, app.rectangleColor); } @Test public void testMoveRectangleForAllDirections() { Task28 app = new Task28(); app.leftRadioButton.setSelected(true); app.moveRectangle(); assertEquals(140, app.rectangleX); app.upRadioButton.setSelected(true); app.moveRectangle(); assertEquals(140, app.rectangleX); assertEquals(140, app.rectangleY); app.rightRadioButton.setSelected(true); app.moveRectangle(); assertEquals(150, app.rectangleX); assertEquals(140, app.rectangleY); app.downRadioButton.setSelected(true); app.moveRectangle(); assertEquals(150, app.rectangleX); assertEquals(150, app.rectangleY); }}
/