From a1f2f1c22b3ff89da1d395816d3d44310188a504 Mon Sep 17 00:00:00 2001 From: 3009594 Date: Mon, 2 Sep 2024 22:21:20 +0200 Subject: [PATCH] GUI --- .../src/GUIAnwendungen/BewegePanle.java | 58 -------- .../src/GUIAnwendungen/Borderlayout.java | 82 ----------- .../src/GUIAnwendungen/CheckBox.java | 43 ++++++ .../src/GUIAnwendungen/ComboBox.java | 92 ++++++++++++ .../src/GUIAnwendungen/DatumAnzeigen.java | 60 -------- .../src/GUIAnwendungen/FileChooser.java | 22 +++ .../src/GUIAnwendungen/Flowlayout.java | 64 -------- .../GUIAnwendungen/GridBagLayoutExample.java | 31 ---- .../src/GUIAnwendungen/Gridlayout.java | 42 ------ .../src/GUIAnwendungen/Jpanel.java | 91 ++++++++---- .../GUIAnwendungen/KeyBindingsExample.java | 31 ---- Programmierung2/src/GUIAnwendungen/List.java | 51 +++++++ .../MenuBar/CheckBoxMenuItem.java | 68 +++++++++ .../src/GUIAnwendungen/MenuBar/MenuBar.java | 36 +++++ .../src/GUIAnwendungen/MenuBar/MenuItem.java | 134 +++++++++++++++++ .../src/GUIAnwendungen/MenuBar/Submenu.java | 54 +++++++ .../src/GUIAnwendungen/ProgressBar.java | 75 ++++++++++ .../src/GUIAnwendungen/RadioButton.java | 70 +++++++++ .../src/GUIAnwendungen/Spinner.java | 48 ++++++ Programmierung2/src/GUIAnwendungen/Table.java | 137 ++++++++++++++++++ Programmierung2/src/GUIAnwendungen/Test.jpg | Bin 20567 -> 0 bytes .../src/GUIAnwendungen/TextEingaben.java | 7 - Programmierung2/src/GUIAnwendungen/Tree.java | 56 +++++++ 23 files changed, 952 insertions(+), 400 deletions(-) delete mode 100644 Programmierung2/src/GUIAnwendungen/BewegePanle.java delete mode 100644 Programmierung2/src/GUIAnwendungen/Borderlayout.java create mode 100644 Programmierung2/src/GUIAnwendungen/CheckBox.java create mode 100644 Programmierung2/src/GUIAnwendungen/ComboBox.java delete mode 100644 Programmierung2/src/GUIAnwendungen/DatumAnzeigen.java create mode 100644 Programmierung2/src/GUIAnwendungen/FileChooser.java delete mode 100644 Programmierung2/src/GUIAnwendungen/Flowlayout.java delete mode 100644 Programmierung2/src/GUIAnwendungen/GridBagLayoutExample.java delete mode 100644 Programmierung2/src/GUIAnwendungen/Gridlayout.java delete mode 100644 Programmierung2/src/GUIAnwendungen/KeyBindingsExample.java create mode 100644 Programmierung2/src/GUIAnwendungen/List.java create mode 100644 Programmierung2/src/GUIAnwendungen/MenuBar/CheckBoxMenuItem.java create mode 100644 Programmierung2/src/GUIAnwendungen/MenuBar/MenuBar.java create mode 100644 Programmierung2/src/GUIAnwendungen/MenuBar/MenuItem.java create mode 100644 Programmierung2/src/GUIAnwendungen/MenuBar/Submenu.java create mode 100644 Programmierung2/src/GUIAnwendungen/ProgressBar.java create mode 100644 Programmierung2/src/GUIAnwendungen/RadioButton.java create mode 100644 Programmierung2/src/GUIAnwendungen/Spinner.java create mode 100644 Programmierung2/src/GUIAnwendungen/Table.java delete mode 100644 Programmierung2/src/GUIAnwendungen/Test.jpg create mode 100644 Programmierung2/src/GUIAnwendungen/Tree.java diff --git a/Programmierung2/src/GUIAnwendungen/BewegePanle.java b/Programmierung2/src/GUIAnwendungen/BewegePanle.java deleted file mode 100644 index 6567841..0000000 --- a/Programmierung2/src/GUIAnwendungen/BewegePanle.java +++ /dev/null @@ -1,58 +0,0 @@ -package GUIAnwendungen; - -import java.awt.Color; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.Timer; - -public class BewegePanle extends JPanel { - private int yPosition = 0; // Startposition des Panels oben - private final int speed = 1; // Geschwindigkeit der Bewegung - private final int panelWidth = 100; - private final int panelHeight = 100; - - public BewegePanle() { - // Setze die Hintergrundfarbe des Panels - setBackground(Color.red); - - // Timer initialisieren und starten - //(int delay, ActionListener listener) - Timer timer = new Timer(10, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - // Aktualisiere die y-Position - yPosition += speed; - - // Wenn das Panel unten angekommen ist, starte wieder von oben - if (yPosition > 750 - panelHeight) { - yPosition = 0; // Zurück an den oberen Rand - } - - // Erzwinge das Neuzeichnen des Panels - setBounds(0, yPosition, panelWidth, panelHeight); - } - }); - - timer.start(); // Timer starten - } - - public static void main(String[] args) { - // Erstelle das Hauptfenster - JFrame frame = new JFrame(); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setSize(750, 750); - frame.setLayout(null); // Deaktiviere das Layout-Management - - // Erstelle eine Instanz von Jpanel und füge sie dem Fenster hinzu - BewegePanle panel = new BewegePanle(); - panel.setBounds(0, 0, 100, 100); // Initiale Position und Größe - frame.add(panel); - - // Mache das Fenster sichtbar - frame.setVisible(true); - } - } - diff --git a/Programmierung2/src/GUIAnwendungen/Borderlayout.java b/Programmierung2/src/GUIAnwendungen/Borderlayout.java deleted file mode 100644 index 29d2497..0000000 --- a/Programmierung2/src/GUIAnwendungen/Borderlayout.java +++ /dev/null @@ -1,82 +0,0 @@ -package GUIAnwendungen; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import javax.swing.JFrame; -import javax.swing.JPanel; - -public class Borderlayout { - /* - * steuert die Positionierung von Komponenten in einem Container - * Z.B: - * NORTH (oben) - SOUTH (unten) - EAST (rechts) - WEST (links) - CENTER (Mitte) - - */ - - public static void main(String[] args) { - - // Erstelle ein Fenster (JFrame-Objekt) - JFrame frame = new JFrame(); - - // Setzt das Layout des Rahmens auf BorderLayout mit einem Abstand von 10 Pixeln zwischen den Komponenten - frame.setLayout(new BorderLayout(10,10)); - - // Legt die Größe des Fensters fest (Breite: 750 Pixel, Höhe: 750 Pixel) - frame.setSize(750, 750); - - // Stellt sicher, dass das Programm beendet wird, wenn das Fenster geschlossen wird - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - // Setzt den Titel des Fensters - frame.setTitle("Mein erstes Fenster"); - - // Macht das Fenster sichtbar - frame.setVisible(true); - - // Erstelle fünf JPanel-Objekte, die als Container für andere Komponenten dienen können - JPanel panel1 = new JPanel(); - JPanel panel2 = new JPanel(); - JPanel panel3 = new JPanel(); - JPanel panel4 = new JPanel(); - JPanel panel5 = new JPanel(); - - // Setzt den Hintergrund von panel1 auf Rot - panel1.setBackground(Color.red); - // Setzt den Hintergrund von panel2 auf Grün - panel2.setBackground(Color.green); - // Setzt den Hintergrund von panel3 auf Gelb - panel3.setBackground(Color.yellow); - // Setzt den Hintergrund von panel4 auf Magenta - panel4.setBackground(Color.magenta); - // Setzt den Hintergrund von panel5 auf Blau - panel5.setBackground(Color.blue); - - // Legt die bevorzugte Größe von panel1 fest (100x100 Pixel) - panel1.setPreferredSize(new Dimension(100,100)); - // Legt die bevorzugte Größe von panel2 fest (100x100 Pixel) - panel2.setPreferredSize(new Dimension(100,100)); - // Legt die bevorzugte Größe von panel3 fest (100x100 Pixel) - panel3.setPreferredSize(new Dimension(100,100)); - // Legt die bevorzugte Größe von panel4 fest (100x100 Pixel) - panel4.setPreferredSize(new Dimension(100,100)); - // Legt die bevorzugte Größe von panel5 fest (100x100 Pixel) - panel5.setPreferredSize(new Dimension(100,100)); - - // Fügt panel1 im Bereich NORTH des BorderLayouts hinzu - frame.add(panel1, BorderLayout.NORTH); - // Fügt panel2 im Bereich WEST des BorderLayouts hinzu - frame.add(panel2, BorderLayout.WEST); - // Fügt panel3 im Bereich EAST des BorderLayouts hinzu - frame.add(panel3, BorderLayout.EAST); - // Fügt panel4 im Bereich SOUTH des BorderLayouts hinzu - frame.add(panel4, BorderLayout.SOUTH); - // Fügt panel5 im Bereich CENTER des BorderLayouts hinzu - frame.add(panel5, BorderLayout.CENTER); - - } - -} diff --git a/Programmierung2/src/GUIAnwendungen/CheckBox.java b/Programmierung2/src/GUIAnwendungen/CheckBox.java new file mode 100644 index 0000000..eca869b --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/CheckBox.java @@ -0,0 +1,43 @@ +package GUIAnwendungen; + +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +import javax.swing.JCheckBox; +import javax.swing.JFrame; +import javax.swing.JLabel; + +public class CheckBox { + + + static JFrame frame = new JFrame("JCheckBox demo"); + static JCheckBox checkBox = new JCheckBox("Check Box"); + static JLabel label = new JLabel(); + + public static void main(String[] args) { + + checkBox.setBounds(40, 40, 100, 30); + + label.setBounds(40, 70, 200, 30); + label.setText("Check Box is not checked"); + + frame.add(checkBox); + frame.add(label); + + frame.setSize(300, 250); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(null); + frame.setVisible(true); + + checkBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if(checkBox.isSelected()) + label.setText("Check Box is checked"); + else + label.setText("Check Box is not checked"); + } + }); + + } +} diff --git a/Programmierung2/src/GUIAnwendungen/ComboBox.java b/Programmierung2/src/GUIAnwendungen/ComboBox.java new file mode 100644 index 0000000..161f758 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/ComboBox.java @@ -0,0 +1,92 @@ +package GUIAnwendungen; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JFrame; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JTextField; + +// Erstelle eine List +public class ComboBox { + + // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها + static JFrame frame = new JFrame("JComboBox demo"); + static JComboBox comboBox = new JComboBox(); + static JButton addButton = new JButton("Add Item"); + static JButton removeButton = new JButton("Remove Selected Item"); + static JButton removeAllButton = new JButton("Remove All Items"); + static JLabel counterLabel = new JLabel("Total items = 0"); + static JTextField textField = new JTextField(); + + public static void main(String[] args) { + + // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ + textField.setBounds(40, 40, 110, 30); + addButton.setBounds(170, 40, 120, 30); + removeButton.setBounds(40, 80, 250, 30); + removeAllButton.setBounds(40, 120, 250, 30); + comboBox.setBounds(310, 40, 140, 30); + counterLabel.setBounds(310, 80, 140, 30); + + // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ + frame.add(textField); + frame.add(addButton); + frame.add(removeButton); + frame.add(removeAllButton); + frame.add(comboBox); + frame.add(counterLabel); + + // frame هنا قمنا بتحديد خصائص الـ + frame.setSize(500, 250); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(null); + frame.setVisible(true); + + + // addButton هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ + addButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + // إذا كان مربع النص غير فارغ و قام المستخدم بالنقر على الزر, عندها سيتم إضافته + if( !textField.getText().equals("") ) + { + comboBox.addItem(textField.getText()); + counterLabel.setText("Total Items = "+ comboBox.getItemCount()); + } + } + }); + + + // removeButton هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ + removeButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + // سيتم حذف العنصر الحالي بشرط وجود عنصر واحد على الأقل فيها + if( comboBox.getItemCount() > 0 ) + { + comboBox.removeItemAt(comboBox.getSelectedIndex()); + counterLabel.setText("Total Items = "+ comboBox.getItemCount()); + } + } + }); + + + // removeAllButton هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ + removeAllButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + // عند النقر على هذا الزر, سيتم حذف جميع العناصر + comboBox.removeAllItems(); + counterLabel.setText("Total Items = "+ comboBox.getItemCount()); + } + }); + + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/DatumAnzeigen.java b/Programmierung2/src/GUIAnwendungen/DatumAnzeigen.java deleted file mode 100644 index bfc0aa6..0000000 --- a/Programmierung2/src/GUIAnwendungen/DatumAnzeigen.java +++ /dev/null @@ -1,60 +0,0 @@ -package GUIAnwendungen; - -import java.awt.Color; -import javax.swing.JFrame; -import javax.swing.JLabel; -import java.awt.FlowLayout; -import java.awt.Font; -import java.util.Date; -import java.text.SimpleDateFormat; - -public class DatumAnzeigen implements Runnable { - - static JLabel timeLabel = new JLabel(); - - @Override - public void run() { - - while(!Thread.currentThread().isInterrupted()) // ( شغال Thread أي طالما أن الـ ) true لا ترجع isInterrupted() طالما أن الدالة - { - - Date date = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss a"); - - timeLabel.setText(sdf.format(date)); // كل ثانية timeLabel سيتم وضع الوقت الحالي كنص للكائن - - try { - Thread.sleep(1000); - } - catch(Exception e) { - timeLabel.setText(e.getMessage()); // timeLabel في حال حدث أي خطأ سيتم وضعه كنص للكائن - timeLabel.setForeground(Color.red); // و سيتم تلوينه باللون الأحمر - } - } - - } - - - public static void main(String[] args) { - - JFrame frame = new JFrame("Display Time"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس - frame.setSize(350, 70); // هنا قمنا بتحديد حجم النافذة. عرضها 350 و طولها 70 - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج - frame.setLayout(new FlowLayout()); // حتى نجعل الأشياء التي نضيفها في النافذة تترب وراء بعضها و في وسط النافذة FlowLayout إستخدمنا الـ - - Font newFont = new Font("Arial", Font.BOLD, 20); // حجمه 20 Arial يمثل نوع خط عريض إسمه Font هنا أنشأنا كائن من الكلاس - - timeLabel.setFont(newFont); // newFont يستخدم الـ TimeLabel هنا جعلنا الـ - timeLabel.setForeground(Color.blue); // إلى اللون الأزرق TimeLabel هنا قمنا بتغيير لون الـ - - frame.add(timeLabel); // frame في الـ TimeLabel هنا أضفنا الـ - - frame.setVisible(true); // هنا جعلنا النافذة مرئية - - Thread t = new Thread(new DatumAnzeigen()); // Runnable نفسه لأنه يطبق الإنترفيس Main() مبني على كائن من الكلاس Thread هنا قمنا بإنشاء كائن من الكلاس - - t.start(); // و التي بدورها ستعرض لنا الوقت كل ثانية run() أي سيتم إستدعاء الدالة thread هنا قمنا بتشغيل كائن الـ - - } - -} \ No newline at end of file diff --git a/Programmierung2/src/GUIAnwendungen/FileChooser.java b/Programmierung2/src/GUIAnwendungen/FileChooser.java new file mode 100644 index 0000000..319b382 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/FileChooser.java @@ -0,0 +1,22 @@ +package GUIAnwendungen; +import javax.swing.JFileChooser; + +public class FileChooser { + + public static void main(String[] args) { + + // chooser إسمه JColorChooser هنا قمنا بإنشاء كائن من الكلاس + JFileChooser chooser = new JFileChooser(); + + // كنافذة لإختيار ملف في وسط شاشة المستخدم chooser هنا قمنا بإظهار الكائن + // returnedValue و تخزين القيمة التي سيرجعها عندما يتم إغلاقه في المتغير + int returnedValue = chooser.showOpenDialog(null); + + if(returnedValue == JFileChooser.APPROVE_OPTION) + { + // هنا من المفترض أن تضع الأوامر التي سيتم تنفيذها بعد إختيار الملف أو المجلد + } + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/Flowlayout.java b/Programmierung2/src/GUIAnwendungen/Flowlayout.java deleted file mode 100644 index 3a26b0a..0000000 --- a/Programmierung2/src/GUIAnwendungen/Flowlayout.java +++ /dev/null @@ -1,64 +0,0 @@ -package GUIAnwendungen; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FlowLayout; - -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; - -public class Flowlayout { - - /* - * - Ordent die Komponenten innerhalb eines Containers in einer einzigen Zeile - * - Ausrichtung: Die Komponenten können linksbündig (LEFT), zentriert (CENTER), oder rechtsbündig (RIGHT) ausgerichtet werden. - * - hier wird auch angezeigt, wie man button auf Panel paltziert - * Hinweis: FlowLayout bietet keine Möglichkeit, eine einzelne Komponente manuell zu platzieren. - */ - - public static void main(String[] args) { - - // Erstelle ein JFrame-Fenster - JFrame fenster = new JFrame(); - - // Beendet das Programm beim Schließen des Fensters - fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - // Legt die Größe des Fensters auf 500x500 Pixel fest - fenster.setSize(500, 500); - - // Setzt das Layout des Fensters auf FlowLayout mit zentrierter Ausrichtung und - // Abständen von 10 Pixeln - fenster.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10)); - - // Erstelle ein JPanel mit vordefinierter Größe 250x250 Pixel und hellgrauem - // Hintergrund - JPanel panel1 = new JPanel(); - panel1.setPreferredSize(new Dimension(250, 250)); - panel1.setBackground(Color.lightGray); - - // Setzt das Layout von panel1 ebenfalls auf FlowLayout - panel1.setLayout(new FlowLayout()); - - // Füge dem Panel 9 Buttons hinzu, die in einer Zeile oder mehreren Zeilen - // angeordnet werden - panel1.add(new JButton("1")); - panel1.add(new JButton("2")); - panel1.add(new JButton("3")); - panel1.add(new JButton("4")); - panel1.add(new JButton("5")); - panel1.add(new JButton("6")); - panel1.add(new JButton("7")); - panel1.add(new JButton("8")); - panel1.add(new JButton("9")); - - // Füge das Panel dem JFrame hinzu - fenster.add(panel1); - - // Macht das Fenster sichtbar - fenster.setVisible(true); - } - - -} diff --git a/Programmierung2/src/GUIAnwendungen/GridBagLayoutExample.java b/Programmierung2/src/GUIAnwendungen/GridBagLayoutExample.java deleted file mode 100644 index 8aafbcb..0000000 --- a/Programmierung2/src/GUIAnwendungen/GridBagLayoutExample.java +++ /dev/null @@ -1,31 +0,0 @@ -package GUIAnwendungen; - -import javax.swing.*; -import java.awt.*; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.GridLayout; - -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; -public class GridBagLayoutExample { - /*- manuell positionien von Elementen - * - in viel flexibleres Layout-Manager, bei dem du die Position, - * Größe und Ausdehnung (über mehrere Zeilen/Spalten) der einzelnen Komponenten präzise steuern kannst. - * - Du kannst einzelne Komponenten unterschiedlich groß machen, sie über mehrere Zellen spannen und Abstände festlegen. - */ - public static void main(String[] args) { - JFrame frame = new JFrame("GridBagLayout Example"); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setLayout(null); - JButton button1 = new JButton("Button1"); - frame.add(button1); - - button1.setBounds(0, 0, 120, 30); - frame.setSize(800, 800); - frame.setVisible(true); - } -} diff --git a/Programmierung2/src/GUIAnwendungen/Gridlayout.java b/Programmierung2/src/GUIAnwendungen/Gridlayout.java deleted file mode 100644 index 97825d2..0000000 --- a/Programmierung2/src/GUIAnwendungen/Gridlayout.java +++ /dev/null @@ -1,42 +0,0 @@ -package GUIAnwendungen; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.GridLayout; - -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JPanel; - -public class Gridlayout { - - public static void main(String[] args) { - - // Erstelle ein JFrame-Fenster - JFrame fenster = new JFrame(); - - // Beendet das Programm beim Schließen des Fensters - fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - // Legt die Größe des Fensters auf 500x500 Pixel fest - fenster.setSize(500, 500); - fenster.setLayout(new GridLayout(4,3,10,4)); - - fenster.add(new JButton("1")); - fenster.add(new JButton("2")); - fenster.add(new JButton("3")); - fenster.add(new JButton("4")); - fenster.add(new JButton("5")); - fenster.add(new JButton("6")); - fenster.add(new JButton("7")); - fenster.add(new JButton("8")); - fenster.add(new JButton("9")); - - fenster.setVisible(true); - - - } - -} diff --git a/Programmierung2/src/GUIAnwendungen/Jpanel.java b/Programmierung2/src/GUIAnwendungen/Jpanel.java index 7512f43..e609efe 100644 --- a/Programmierung2/src/GUIAnwendungen/Jpanel.java +++ b/Programmierung2/src/GUIAnwendungen/Jpanel.java @@ -1,6 +1,12 @@ package GUIAnwendungen; -import java.awt.Color; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.JTextField; +import javax.swing.JComboBox; +import javax.swing.JButton; import java.awt.Font; import javax.swing.BorderFactory; @@ -13,30 +19,65 @@ import javax.swing.border.Border; // mit Jpanel kann man alle grafischen Bauelemente einsetzen public class Jpanel { - public static void main(String[] args) { - JPanel panel = new JPanel(); - panel.setBackground(Color.red); - // setze eine Grafisches Bauelement (int x, int y, int width, int height) - panel.setBounds(100, 100, 10, 10); - - JFrame frame = new JFrame(); - - //stellt sicher, dass keine automatische Positionierung und Größenanpassung erhalten - frame.setLayout(null); - - // setSize(width, height) - frame.setSize(750, 750); - - // setzte einen Überschrift für mein Fenster - frame.setTitle("Mein erstes Fenster"); - - //setVisible(boolean): gibt an, ob mein Fenster sichtbar ist oder nicht - frame.setVisible(true); - - frame.add(panel); - - - } + public static void main(String[] args) { + + // هنا قمنا بإنشاء النافذة مع تحديد بعض خصائصها + JFrame frame = new JFrame("JPanel demo"); + frame.setSize(400, 400); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(null); + + // و وضعنا له حدود و عنوان Layout Manager لا يستخدم أي Panel هنا قمنا بتعريف + JPanel panel = new JPanel(null); + panel.setBorder(BorderFactory.createTitledBorder("Add User")); + panel.setBounds(50, 30, 290, 300); + + // Frame في الـ Panel هنا وضعنا الـ + frame.add(panel); + + // Panel هنا قمنا بتعريف جميع الأشياء التي سنضعها في الـ + JLabel label1 = new JLabel("First Name"); + JLabel label2 = new JLabel("Last Name"); + JLabel label3 = new JLabel("Father Name"); + JLabel label4 = new JLabel("Mother Name"); + JLabel label5 = new JLabel("Gender"); + JTextField field1 = new JTextField(); + JTextField field2 = new JTextField(); + JTextField field3 = new JTextField(); + JTextField field4 = new JTextField(); + JComboBox comboBox = new JComboBox(new String[]{ "Male", "Female"}); + JButton button = new JButton("Add User"); + + // Panel هنا قمنا بتحديد مكان كل شيء سنضيفه بداخل الـ + label1.setBounds(30, 50, 100, 25); + label2.setBounds(30, 90, 100, 25); + label3.setBounds(30, 130, 100, 25); + label4.setBounds(30, 170, 100, 25); + label5.setBounds(30, 210, 100, 25); + field1.setBounds(120, 50, 130, 25); + field2.setBounds(120, 90, 130, 25); + field3.setBounds(120, 130, 130, 25); + field4.setBounds(120, 170, 130, 25); + comboBox.setBounds(120, 210, 130, 25); + button.setBounds(120, 255, 130, 25); + + // Panel في الـ Buttons هنا قمنا بوضع الـ + panel.add(label1); + panel.add(label2); + panel.add(label3); + panel.add(label4); + panel.add(label5); + panel.add(field1); + panel.add(field2); + panel.add(field3); + panel.add(field4); + panel.add(comboBox); + panel.add(button); + + // مرئية Frame هنا جعلنا الـ + frame.setVisible(true); + + } } \ No newline at end of file diff --git a/Programmierung2/src/GUIAnwendungen/KeyBindingsExample.java b/Programmierung2/src/GUIAnwendungen/KeyBindingsExample.java deleted file mode 100644 index 25032a6..0000000 --- a/Programmierung2/src/GUIAnwendungen/KeyBindingsExample.java +++ /dev/null @@ -1,31 +0,0 @@ -package GUIAnwendungen; - -import javax.swing.*; -import java.awt.event.ActionEvent; - -public class KeyBindingsExample extends JFrame { - public KeyBindingsExample() { - setTitle("KeyBindings Beispiel"); - setSize(300, 200); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - // Panel erstellen - JPanel panel = new JPanel(); - add(panel); - - // KeyBinding hinzufügen: 'A' Taste - panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("A"), "keyA"); - panel.getActionMap().put("keyA", new AbstractAction() { - @Override - public void actionPerformed(ActionEvent e) { - System.out.println("Taste 'A' wurde gedrückt (KeyBindings)."); - } - }); - - setVisible(true); - } - - public static void main(String[] args) { - new KeyBindingsExample(); - } -} diff --git a/Programmierung2/src/GUIAnwendungen/List.java b/Programmierung2/src/GUIAnwendungen/List.java new file mode 100644 index 0000000..2304b97 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/List.java @@ -0,0 +1,51 @@ +package GUIAnwendungen; + +import javax.swing.DefaultListModel; +import javax.swing.JFrame; +import javax.swing.JList; +import javax.swing.JScrollPane; + +public class List { + + public static void main(String[] args) { + + JFrame frame = new JFrame("JList demo"); + frame.setSize(320, 360); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(null); + + // Erstellt ein neues DefaultListModel-Objekt, das als Datencontainer für die + // Elemente der JList dient. + // Es speichert die Liste der Elemente (z.B. Farben), die in der JList angezeigt + // werden sollen. + DefaultListModel model = new DefaultListModel(); + + // Erstellt eine neue JList und weist ihr das zuvor erstellte DefaultListModel zu. + // Die JList zeigt die Elemente an, die im DefaultListModel gespeichert sind. + JList list = new JList(model); + + // Erstellt ein JScrollPane (ein scrollbares Fenster) und fügt die JList darin ein. + // Dies ermöglicht das Scrollen, wenn die Liste mehr Elemente enthält, als im sichtbaren Bereich angezeigt werden können. + JScrollPane listScrollPane = new JScrollPane(list); + + listScrollPane.setBounds(100, 40, 100, 230); + + model.addElement("red"); + model.addElement("blue"); + model.addElement("green"); + model.addElement("yellow"); + model.addElement("orange"); + model.addElement("brown"); + model.addElement("pink"); + model.addElement("purple"); + model.addElement("gray"); + model.addElement("black"); + model.addElement("white"); + + frame.add(listScrollPane); + + frame.setVisible(true); + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/MenuBar/CheckBoxMenuItem.java b/Programmierung2/src/GUIAnwendungen/MenuBar/CheckBoxMenuItem.java new file mode 100644 index 0000000..a9da58b --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/MenuBar/CheckBoxMenuItem.java @@ -0,0 +1,68 @@ +package GUIAnwendungen.MenuBar; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JRadioButtonMenuItem; +import javax.swing.ButtonGroup; +public class CheckBoxMenuItem { + + public static void main(String[] args) { + + JFrame frame = new JFrame("JMenuBar demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس + frame.setSize(500, 250); // هنا قمنا بتحديد حجم النافذة. عرضها 500 و طولها 250 + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج + + // هنا قمنا بتعريف شريط القوائم + JMenuBar menuBar = new JMenuBar(); + + // هنا قمنا بتعريف قائمة واحدة + JMenu menu = new JMenu("Menu"); + + // Check Box هنا قمنا بتعريف إثنين + JCheckBoxMenuItem connect = new JCheckBoxMenuItem("Connect"); + JCheckBoxMenuItem recieveNotifications = new JCheckBoxMenuItem("Recieve Notifications"); + + // Radio Buttons هنا قمنا بتعريف ثلاثة + JRadioButtonMenuItem isAvailable = new JRadioButtonMenuItem("Available"); + JRadioButtonMenuItem isBusy = new JRadioButtonMenuItem("Busy"); + JRadioButtonMenuItem isAway = new JRadioButtonMenuItem("Away"); + + // هنا قمنا بتعريف عنصر عادي + JMenuItem exit = new JMenuItem("Exit"); + + // ضمن مجموعة واحدة Radio Buttons لوضع الثلاثة ButtonGroup هنا قمنا بتعريف كائن من الكلاس + ButtonGroup group = new ButtonGroup(); + + // في نفس المجموعة و بالتالي أصبح بالإمكان إختيار أحدهم فقط Radio Buttons هنا وضعنا الثلاثة + group.add(isAvailable); + group.add(isBusy); + group.add(isAway); + + // مختارين بشكل إفتراضي isAvailable و الـ connect هنا جعلنا الـ + connect.setSelected(true); + isAvailable.setSelected(true); + + // هنا قمنا بوضع القائمة في شريط القوائم + menuBar.add(menu); + + // هنا قمنا بوضع جميع العناصر في القائمة + menu.add(connect); + menu.add(recieveNotifications); + menu.addSeparator(); // هنا أضفنا خط فاصل + menu.add(isAvailable); + menu.add(isBusy); + menu.add(isAway); + menu.addSeparator(); // هنا أضفنا خط فاصل + menu.add(exit); + + // frame هنا قمنا بوضع شريط القوائم في الـ + frame.setJMenuBar(menuBar); + + // مرئية frame هنا جعلنا الـ + frame.setVisible(true); + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/MenuBar/MenuBar.java b/Programmierung2/src/GUIAnwendungen/MenuBar/MenuBar.java new file mode 100644 index 0000000..547feb7 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/MenuBar/MenuBar.java @@ -0,0 +1,36 @@ +package GUIAnwendungen.MenuBar; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; + +public class MenuBar { + + public static void main(String[] args) { + + JFrame frame = new JFrame("JMenuBar demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من + // الكلاس + frame.setSize(500, 250); // هنا قمنا بتحديد حجم النافذة. عرضها 500 و طولها 250 + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج + + // هنا قمنا بتعريف شريط القوائم + JMenuBar menuBar = new JMenuBar(); + + // هنا قمنا بتعريف 3 قوائم + JMenu file = new JMenu("File"); + JMenu edit = new JMenu("Edit"); + JMenu help = new JMenu("Help"); + + // هنا قمنا بوضع القوائم الثلاثة في شريط القوائم + menuBar.add(file); + menuBar.add(edit); + menuBar.add(help); + + // frame هنا قمنا بوضع شريط القوائم في الـ + frame.setJMenuBar(menuBar); + + // مرئية frame هنا جعلنا الـ + frame.setVisible(true); + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/MenuBar/MenuItem.java b/Programmierung2/src/GUIAnwendungen/MenuBar/MenuItem.java new file mode 100644 index 0000000..b2aec71 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/MenuBar/MenuItem.java @@ -0,0 +1,134 @@ +package GUIAnwendungen.MenuBar; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +public class MenuItem { + + public static void main(String[] args) { + + JFrame frame = new JFrame("JMenuBar demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس + frame.setSize(500, 250); // هنا قمنا بتحديد حجم النافذة. عرضها 500 و طولها 250 + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج + + // هنا قمنا بتعريف شريط القوائم + JMenuBar menuBar = new JMenuBar(); + + // هنا قمنا بتعريف 3 قوائم + JMenu file = new JMenu("File"); + JMenu edit = new JMenu("Edit"); + JMenu help = new JMenu("Help"); + + // هنا قمنا بتعريف 11 عنصر + JMenuItem newFile = new JMenuItem("New"); + JMenuItem open = new JMenuItem("Open"); + JMenuItem save = new JMenuItem("Save"); + JMenuItem exit = new JMenuItem("Exit"); + JMenuItem undo = new JMenuItem("Undo"); + JMenuItem cut = new JMenuItem("Cut"); + JMenuItem copy = new JMenuItem("Copy"); + JMenuItem paste = new JMenuItem("Paste"); + JMenuItem select = new JMenuItem("Select All"); + JMenuItem about = new JMenuItem("About"); + JMenuItem report = new JMenuItem("Report Issue"); + + // هنا قمنا بوضع القوائم الثلاثة في شريط القوائم + menuBar.add(file); + menuBar.add(edit); + menuBar.add(help); + + // file في القائمة exit و save ,open ,newFile هنا قمنا بوضع العناصر + file.add(newFile); + file.add(open); + file.add(save); + file.addSeparator(); // هنا أضفنا خط فاصل + file.add(exit); + + // edit في القائمة select و paste ,copy ,cut ,undo هنا قمنا بوضع العناصر + edit.add(undo); + edit.addSeparator(); // هنا أضفنا خط فاصل + edit.add(cut); + edit.add(copy); + edit.add(paste); + edit.addSeparator(); // هنا أضفنا خط فاصل + edit.add(select); + + // help في القائمة report و about هنا قمنا بوضع العناصر + help.add(about); + help.add(report); + + // frame هنا قمنا بوضع شريط القوائم في الـ + frame.setJMenuBar(menuBar); + + // مرئية frame هنا جعلنا الـ + frame.setVisible(true); + + // هنا نضع الأوامر التي ستنفذ عند النقر على كل عنصر موجود في القائمة + ActionListener al = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if( e.getSource() == newFile ) + { + // newFile هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == open ) + { + // open هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == save ) + { + // save هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == exit ) + { + // exit هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == undo ) + { + // undo هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == copy ) + { + // copy هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == cut ) + { + // cut هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == paste ) + { + // paste هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == select ) + { + // select هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == about ) + { + // about هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + else if( e.getSource() == report ) + { + // report هنا نضع الأوامر التي نريد أن يتم تنفيذه عند النقر على العنصر + } + + } + }; + + // al هنا ربطنا جميع العناصر بالكائن + newFile.addActionListener(al); + open.addActionListener(al); + save.addActionListener(al); + exit.addActionListener(al); + undo.addActionListener(al); + cut.addActionListener(al); + copy.addActionListener(al); + paste.addActionListener(al); + select.addActionListener(al); + about.addActionListener(al); + report.addActionListener(al); + + } +} diff --git a/Programmierung2/src/GUIAnwendungen/MenuBar/Submenu.java b/Programmierung2/src/GUIAnwendungen/MenuBar/Submenu.java new file mode 100644 index 0000000..226e212 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/MenuBar/Submenu.java @@ -0,0 +1,54 @@ +package GUIAnwendungen.MenuBar; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +public class Submenu { + + public static void main(String[] args) { + + JFrame frame = new JFrame("JMenuBar demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من + // الكلاس + frame.setSize(500, 250); // هنا قمنا بتحديد حجم النافذة. عرضها 500 و طولها 250 + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج + + // هنا قمنا بتعريف شريط القوائم + JMenuBar menuBar = new JMenuBar(); + + // هنا قمنا بتعريف القائمة التي ستظهر في الشريط و القائمة التي ستظهر بداخلها + JMenu menu = new JMenu("Menu"); + JMenu subMenu = new JMenu("Sub Menu"); + + // هنا قمنا بتعريف 6 عناصر + JMenuItem item1 = new JMenuItem("Item 1"); + JMenuItem item2 = new JMenuItem("Item 2"); + JMenuItem item3 = new JMenuItem("Item 3"); + JMenuItem item4 = new JMenuItem("Item 4"); + JMenuItem item5 = new JMenuItem("Item 5"); + JMenuItem item6 = new JMenuItem("Item 6"); + + // هنا قمنا بوضع القائمة في شريط القوائم + menuBar.add(menu); + + // هنا قمنا بوضع أول ثلاث عناصر في القائمة + menu.add(item1); + menu.add(item2); + menu.add(item3); + + // هنا قمنا بوضع القائمة الداخلية في القائمة + menu.add(subMenu); + + // هنا قمنا بوضع العناصر الثلاثة المتبقية في القائمة الداخلية + subMenu.add(item4); + subMenu.add(item5); + subMenu.add(item6); + + // frame هنا قمنا بوضع شريط القوائم في الـ + frame.setJMenuBar(menuBar); + + // مرئية frame هنا جعلنا الـ + frame.setVisible(true); + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/ProgressBar.java b/Programmierung2/src/GUIAnwendungen/ProgressBar.java new file mode 100644 index 0000000..5333a9f --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/ProgressBar.java @@ -0,0 +1,75 @@ +package GUIAnwendungen; + + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPasswordField; +import javax.swing.JProgressBar; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.Color; +public class ProgressBar { + + + + public static void main(String[] args) { + + // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها + JFrame frame = new JFrame("JProgressBar demo"); + + JLabel label_1 = new JLabel("Password"); + JLabel label_2 = new JLabel("Strength"); + JPasswordField password = new JPasswordField(); + JProgressBar progress = new JProgressBar(0, 10); + + // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ + label_1.setBounds(20, 20, 60, 30); + password.setBounds(90, 20, 140, 30); + label_2.setBounds(20, 60, 60, 30); + progress.setBounds(90, 68, 140, 15); + + // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ + frame.add(label_1); + frame.add(password); + frame.add(label_2); + frame.add(progress); + + // frame هنا قمنا بتحديد خصائص الـ + frame.setSize(300, 150); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(null); + frame.setVisible(true); + + + // password هنا نضع الأوامر التي نريد تنفيذها عند كتابة أو حذف أي حرف موجود في مربع الـ + password.addKeyListener(new KeyListener() { + @Override + public void keyTyped(KeyEvent e) { } + + @Override + public void keyPressed(KeyEvent e) { } + + @Override + public void keyReleased(KeyEvent e) + { + int passLength = password.getPassword().length; + progress.setValue(passLength); + + // إلى الأحمر Progress Bar إذا قام المستخدم بإدخال 4 أحرف, سيتم تغيير لون الـ + if(passLength < 5) + progress.setForeground(Color.red); + + // إلى الأصفر Progress Bar إذا قام المستخدم بإدخال 5-10 أحرف, سيتم تغيير لون الـ + else if(passLength >= 5 && passLength < 10) + progress.setForeground(Color.yellow); + + // إلى الأخضر Progress Bar إذا قام المستخدم بإدخال 10 أحرف أو أكثر, سيتم تغيير لون الـ + else if(passLength >= 10) + progress.setForeground(Color.green); + + } + }); + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/RadioButton.java b/Programmierung2/src/GUIAnwendungen/RadioButton.java new file mode 100644 index 0000000..b432e8c --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/RadioButton.java @@ -0,0 +1,70 @@ +package GUIAnwendungen; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JRadioButton; +import javax.swing.ButtonGroup; +import javax.swing.JButton; + +public class RadioButton { + + static JFrame frame = new JFrame("JRadioButton demo"); + static JLabel label = new JLabel("Select your language"); + static JRadioButton radioButton_1 = new JRadioButton("Arabic", true); + static JRadioButton radioButton_2 = new JRadioButton("English"); + static JRadioButton radioButton_3 = new JRadioButton("French"); + static JLabel labelResult = new JLabel(); + static JButton button = new JButton("View selected choice"); + + + public static void main(String[] args) { + + ButtonGroup group = new ButtonGroup(); + group.add(radioButton_1); + group.add(radioButton_2); + group.add(radioButton_3); + + label.setBounds(40, 10, 150, 30); + radioButton_1.setBounds(40, 40, 100, 30); + radioButton_2.setBounds(40, 70, 100, 30); + radioButton_3.setBounds(40, 100, 100, 30); + button.setBounds(40, 150, 170, 30); + labelResult.setBounds(40, 190, 180, 30); + + + frame.add(label); + frame.add(radioButton_1); + frame.add(radioButton_2); + frame.add(radioButton_3); + frame.add(button); + frame.add(labelResult); + + frame.setSize(300, 300); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(null); + frame.setVisible(true); + + + button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + // labelResult سيتم وضع النص التالي كنص للـ radioButton_1 إذا قام المستخدم بإختيار الـ + if(radioButton_1.isSelected()) + labelResult.setText("You language is: "+radioButton_1.getText()); + + // labelResult سيتم وضع النص التالي كنص للـ radioButton_2 إذا قام المستخدم بإختيار الـ + else if(radioButton_2.isSelected()) + labelResult.setText("You language is: "+radioButton_2.getText()); + + // labelResult سيتم وضع النص التالي كنص للـ radioButton_3 إذا قام المستخدم بإختيار الـ + else if(radioButton_3.isSelected()) + labelResult.setText("You language is: "+radioButton_3.getText()); + } + }); + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/Spinner.java b/Programmierung2/src/GUIAnwendungen/Spinner.java new file mode 100644 index 0000000..92fdac3 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/Spinner.java @@ -0,0 +1,48 @@ +package GUIAnwendungen; + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JSpinner; +import javax.swing.SpinnerListModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + + +public class Spinner { + + // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها + static JFrame frame = new JFrame("JSpinner demo"); + static String[] levels = { "Easy", "Meduim", "Hard" }; + static SpinnerListModel model = new SpinnerListModel(levels); + static JSpinner spinner = new JSpinner(model); + static JLabel label = new JLabel("Level: Easy"); + + public static void main(String[] args) { + + // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ + spinner.setBounds(100, 40, 100, 30); + label.setBounds(100, 80, 100, 30); + + // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ + frame.add(spinner); + frame.add(label); + + // frame هنا قمنا بتحديد خصائص الـ + frame.setSize(300, 250); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(null); + frame.setVisible(true); + + + // spinner هنا نضع الأوامر التي نريد تنفيذها في كل مرة يتم فيها تغيير قيمة الـ + spinner.addChangeListener(new ChangeListener() { + @Override + // سيتم عرض القيمة التي إختارها + public void stateChanged(ChangeEvent e) { + label.setText("Level: " + spinner.getValue()); + } + }); + + } + +} diff --git a/Programmierung2/src/GUIAnwendungen/Table.java b/Programmierung2/src/GUIAnwendungen/Table.java new file mode 100644 index 0000000..28751f7 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/Table.java @@ -0,0 +1,137 @@ +package GUIAnwendungen; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JTextField; +import javax.swing.JButton; +import javax.swing.JTable; +import javax.swing.table.DefaultTableModel; +import javax.swing.JScrollPane; + + +public class Table { + // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها + static JFrame frame = new JFrame("JTable demo"); + static JLabel label_1 = new JLabel("ID"); + static JLabel label_2 = new JLabel("Name"); + static JLabel label_3 = new JLabel("Phone"); + static JTextField textField_1 = new JTextField(); + static JTextField textField_2 = new JTextField(); + static JTextField textField_3 = new JTextField(); + static JButton btn_add = new JButton("Add"); + static JButton btn_clear = new JButton("Clear"); + static JButton btn_delete = new JButton("Delete Selected"); + static JButton btn_deleteAll = new JButton("Delete All"); + static DefaultTableModel model = new DefaultTableModel(); + static JTable table = new JTable( model ); + static JScrollPane tableScroller = new JScrollPane( table ); + + + public static void main(String[] args) { + + // هنا قمنا بوضع أسماء الأعمدة التي ستظهر في الجدول + model.addColumn("ID"); + model.addColumn("Name"); + model.addColumn("Phone"); + + // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ + label_1.setBounds(40, 50, 50, 20); + label_2.setBounds(40, 90, 50, 20); + label_3.setBounds(40, 130, 50, 20); + textField_1.setBounds(100, 50, 120, 20); + textField_2.setBounds(100, 90, 120, 20); + textField_3.setBounds(100, 130, 120, 20); + btn_add.setBounds(150, 180, 70, 30); + btn_clear.setBounds(70, 180, 70, 30); + btn_delete.setBounds(315, 250, 140, 30); + btn_deleteAll.setBounds(470, 250, 140, 30); + tableScroller.setBounds(280, 50, 370, 160); + + // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ + frame.add(label_1); + frame.add(label_2); + frame.add(label_3); + frame.add(textField_1); + frame.add(textField_2); + frame.add(textField_3); + frame.add(btn_add); + frame.add(btn_clear); + frame.add(btn_delete); + frame.add(btn_deleteAll); + frame.add(tableScroller); + + // frame هنا قمنا بتحديد خصائص الـ + frame.setSize(710, 350); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLayout(null); + frame.setVisible(true); + + + // btn_add هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ + btn_add.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + // إذا قام المستخدم بإدخال بيانات في مربعات النصوص الثلاثة + if( !textField_1.getText().equals("") && !textField_2.getText().equals("") && !textField_3.getText().equals("") ) + { + // عندها سيتم تخزينهم في متغيرات بشكل مؤقت + String id = textField_1.getText(); + String name = textField_2.getText(); + String phone = textField_3.getText(); + + // الخاصة بالجدول model بعدها سيتم تخزينهم في مصفوفة واحدة, ثم إضافتها في الـ + String[] userInfo = { id, name, phone }; + model.addRow( userInfo ); + } + } + }); + + + // btn_clear هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ + btn_clear.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + // سيتم مسح النصوص المدخلة في مربعات النصوص الثلاثة + textField_1.setText(""); + textField_2.setText(""); + textField_3.setText(""); + } + }); + + + // btn_delete هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ + btn_delete.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // إذا كان المستخدم قد قام بتحديد سطر واحد على الأقل من الجدول + if( table.getSelectedRowCount() > 0 ) + { + // الخاص فيه index كل سطر قام المستخدم بتحديده من الجدول بعدها سيتم حذف كل سطر من خلال رقم الـ index سيتم تخزين رقم + int[] selectedIndices = table.getSelectedRows(); + for( int i=selectedIndices.length-1; i>=0; i-- ) + { + model.removeRow( selectedIndices[i] ); + } + } + } + }); + + + // btn_deleteAll هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ + btn_deleteAll.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) + { + // يساوي 0. أي سيتم مسح جميع العناصر الموجودة فيها model هنا سيتم جعل عدد أسطر الـ + model.setRowCount(0); + } + }); + + + } + + +} diff --git a/Programmierung2/src/GUIAnwendungen/Test.jpg b/Programmierung2/src/GUIAnwendungen/Test.jpg deleted file mode 100644 index 0c7ff2909b33623b5f0f4613f260c09db2d03264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20567 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 CpnUlN diff --git a/Programmierung2/src/GUIAnwendungen/TextEingaben.java b/Programmierung2/src/GUIAnwendungen/TextEingaben.java index 8afb92a..8328cae 100644 --- a/Programmierung2/src/GUIAnwendungen/TextEingaben.java +++ b/Programmierung2/src/GUIAnwendungen/TextEingaben.java @@ -8,13 +8,6 @@ import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; -/*Beschreibung das Problem: - * Instanzvariablen sollten verwendet werden, wenn du sicherstellen möchtest, dass Variablen wie JButton und JTextField in der gesamten Klasse (und in actionPerformed) sichtbar sind. - Der Konstruktor der Klasse wird verwendet, um die GUI-Komponenten zu initialisieren und das Fenster aufzubauen. - Die main-Methode ist static und dient dazu, die Anwendung zu starten, indem sie eine Instanz der Klasse erstellt. - Anonyme innere Klassen sind eine praktische Möglichkeit, wenn du einfache Event-Handling-Logik direkt in der main-Methode implementieren möchtest, ohne eine zusätzliche Klasse oder Instanzmethoden zu erstellen. - * - */ public class TextEingaben extends JFrame implements ActionListener { // Instanzvariablen diff --git a/Programmierung2/src/GUIAnwendungen/Tree.java b/Programmierung2/src/GUIAnwendungen/Tree.java new file mode 100644 index 0000000..faeb006 --- /dev/null +++ b/Programmierung2/src/GUIAnwendungen/Tree.java @@ -0,0 +1,56 @@ +package GUIAnwendungen; +import javax.swing.JFrame; +import java.awt.GridLayout; +import javax.swing.JTree; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.JScrollPane; +public class Tree { + + public static void main(String[] args) { + + JFrame frame = new JFrame("JTree demo"); // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من + // الكلاس + frame.setSize(350, 300); // هنا قمنا بتحديد النافذة. عرضها 350 و طولها 300 + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // هنا جعلنا زر الخروج من النافذة يغلق البرنامج + frame.setLayout(new GridLayout()); // في كامل الشاشة مهما كان حجمها Tree لأننا سنضع الـ Layout Manager كـ + // GridLayout هنا إستخدمنا كائن من الكلاس + + // Tree التي سنضعها في الـ Nodes هنا قمنا بتعريف جميع الـ + DefaultMutableTreeNode menu = new DefaultMutableTreeNode("Menu"); + DefaultMutableTreeNode food = new DefaultMutableTreeNode("Food"); + DefaultMutableTreeNode drink = new DefaultMutableTreeNode("Drink"); + DefaultMutableTreeNode pizza = new DefaultMutableTreeNode("Pizza"); + DefaultMutableTreeNode hotDogs = new DefaultMutableTreeNode("Hot Dogs"); + DefaultMutableTreeNode chicken = new DefaultMutableTreeNode("Chicken"); + DefaultMutableTreeNode hamburger = new DefaultMutableTreeNode("Hamburger"); + DefaultMutableTreeNode pepsi = new DefaultMutableTreeNode("Pepsi"); + DefaultMutableTreeNode cola = new DefaultMutableTreeNode("Cola"); + DefaultMutableTreeNode rani = new DefaultMutableTreeNode("Rani"); + DefaultMutableTreeNode water = new DefaultMutableTreeNode("Water"); + + // بداخل بعضهم البعض تماماً كما يظهر في نتيجة التشغيل Nodes هنا قمنا بوضع الـ + menu.add(food); + menu.add(drink); + food.add(pizza); + food.add(hotDogs); + food.add(chicken); + food.add(hamburger); + drink.add(pepsi); + drink.add(cola); + drink.add(rani); + drink.add(water); + + // لها Root Node كـ menu مع وضع كائن الـ Tree هنا قمنا بتعريف الـ + JTree tree = new JTree(menu); + + tree.setToggleClickCount(1); // تظهر ما فيها من نقرة واحدة Node هنا جعلنا أي + tree.setEditable(true); // عند النقر على إسمها ثلاث مرات متتالية Node بالإضافة إلى أنه يمكن تغيير إسم أي + + JScrollPane treeScroller = new JScrollPane(tree); // عند الحاجة Scroll Bar لضمان ظهور JScrollPane بداخل كائن من + // الكلاس tree هنا وضعنا الـ + frame.add(treeScroller); // frame في الـ treeScroller هنا أضفنا الـ + frame.setVisible(true); // هنا جعلنا النافذة مرئية + + } + +}