mirror of
				https://github.com/Brandon-Rozek/website.git
				synced 2025-10-30 21:41:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			222 lines
		
	
	
	
		
			8.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
	
		
			8.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html>
 | |
| <head>
 | |
|   <meta charset="utf-8" />
 | |
|   <meta name="author" content="Brandon Rozek">
 | |
|   <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | |
|   <meta name="robots" content="noindex" />
 | |
|     <title>Brandon Rozek</title>
 | |
|   <link rel="stylesheet" href="themes/bitsandpieces/styles/main.css" type="text/css" />
 | |
|   <link rel="stylesheet" href="themes/bitsandpieces/styles/highlightjs-github.css" type="text/css" />
 | |
| </head>
 | |
| <body>
 | |
| 
 | |
| <aside class="main-nav">
 | |
| <nav>
 | |
|   <ul>
 | |
|           <li class="menuitem ">
 | |
|         <a href="index.html%3Findex.html" data-shortcut="">
 | |
|           Home
 | |
|                   </a>
 | |
|       </li>
 | |
|           <li class="menuitem ">
 | |
|         <a href="index.html%3Fcourses.html" data-shortcut="">
 | |
|           Courses
 | |
|                   </a>
 | |
|       </li>
 | |
|           <li class="menuitem ">
 | |
|         <a href="index.html%3Flabaide.html" data-shortcut="">
 | |
|           Lab Aide
 | |
|                   </a>
 | |
|       </li>
 | |
|           <li class="menuitem ">
 | |
|         <a href="index.html%3Fpresentations.html" data-shortcut="">
 | |
|           Presentations
 | |
|                   </a>
 | |
|       </li>
 | |
|           <li class="menuitem ">
 | |
|         <a href="index.html%3Fresearch.html" data-shortcut="">
 | |
|           Research
 | |
|                   </a>
 | |
|       </li>
 | |
|           <li class="menuitem ">
 | |
|         <a href="index.html%3Ftranscript.html" data-shortcut="">
 | |
|           Transcript
 | |
|                   </a>
 | |
|       </li>
 | |
|       </ul>
 | |
| </nav>
 | |
| </aside>
 | |
| <main class="main-content">
 | |
|   <article class="article">
 | |
|     <h1>Lecture for November 13</h1>
 | |
| <h2>File IO (Cont.)</h2>
 | |
| <p>Last class we talked about reading from files, we can also write to files.</p>
 | |
| <h3>Import necessary libraries</h3>
 | |
| <p>First you must import all of the necessary libraries</p>
 | |
| <pre><code class="language-java">// To read 
 | |
| import java.util.Scanner; 
 | |
| import java.io.FileOutputStream;
 | |
| // To Write
 | |
| import java.io.FileReader;
 | |
| import java.io.PrintWriter;
 | |
| // For Exception Handling
 | |
| import java.io.IOException;</code></pre>
 | |
| <p>Then in your main, declare a <code>FileOutputStream</code> and <code>PrintWriter</code></p>
 | |
| <pre><code class="language-java">FileOutputStream file;
 | |
| PrintWriter print;</code></pre>
 | |
| <h3>Try-Catch-Finally</h3>
 | |
| <p>Create a try block to open a file for writing</p>
 | |
| <pre><code class="language-java">try {
 | |
|       // If the file doesn't exist, it'll create it
 | |
|       file = new FileOutputStream("output.txt"); 
 | |
|       print = new PrintWriter(file);
 | |
| } catch (IOException except) {
 | |
|       // Prints out the error message
 | |
|       System.out.println("File error " + except.getMessage()); 
 | |
| } </code></pre>
 | |
| <p>Adding a finally block allows the program to clean up before it closes</p>
 | |
| <pre><code class="language-java">    try {
 | |
|       file = new FileOutputStream("output.txt"); 
 | |
|       print = new PrintWriter(file);
 | |
|     } catch (IOException except) {
 | |
|       System.out.println("File error " + except.getMessage()); 
 | |
|     } finally { // It starts here!
 | |
|       delete file;
 | |
|       delete print;
 | |
|       file.close();
 | |
|       return;
 | |
|     }</code></pre>
 | |
| <h3>Write to the file :)</h3>
 | |
| <p>Then you can write the to file!</p>
 | |
| <pre><code class="language-java">// Do you notice the following methods?
 | |
|   print.println("Your number is");
 | |
|   print.print("My name is..\n");
 | |
|   print.printf("%s %d", "Hello ", 5);
 | |
|   print.flush(); //Clears the output stream
 | |
|   file.close(); //Closes the file
 | |
| </code></pre>
 | |
| <p>Extra Note: Disk fragmentation is a way of cleaning up memory that isn't being used by any of the code on your computer. </p>
 | |
| <h2>Swing Graphics</h2>
 | |
| <h3>Importing Necessary Libraries</h3>
 | |
| <p>You need to import all the necessary libraries first</p>
 | |
| <pre><code class="language-java">import javax.swing.*;
 | |
| import java.awt.FlowLayout;
 | |
| import java.awt.event.ActionListener;</code></pre>
 | |
| <h3>Changing the class header</h3>
 | |
| <p>Your class file needs to extend <code>JFrame</code> that way it can use a bunch of the already existent code written for Swing applications</p>
 | |
| <pre><code class="language-java">public class firstGUi extends JFrame {
 | |
|   //....</code></pre>
 | |
| <h3>Swing Components</h3>
 | |
| <p>Java Swing makes use of what is called Swing Components. These are basic building blocks of GUI items you can add to the screen. For example, a checkbox, a radio button, text field. These are all swing components.</p>
 | |
| <p>I wrote a blog post back in the summer which is an overview of them. You can check it out here: <a href="https://brandonrozek.com/2017/06/java-swing-components/">https://brandonrozek.com/2017/06/java-swing-components/</a></p>
 | |
| <p>Inside your <code>firstGUI</code> class, declare some Swing components you would like to use in the program</p>
 | |
| <pre><code class="language-java">public class firstGUI extends JFrame {
 | |
|   JButton button1;
 | |
|   JTextArea area;
 | |
|   JTextField text;
 | |
|   // ....
 | |
| </code></pre>
 | |
| <h3>Constructor</h3>
 | |
| <p>You need to create a constructor for this class that way you can initiate all of the swing component values.</p>
 | |
| <pre><code class="language-java">// ...
 | |
| JButton button1;
 | |
| JTextArea area;
 | |
| JTextField text;
 | |
| 
 | |
| // Begin Constructor
 | |
| firstGUI() {
 | |
|   // Define the components
 | |
|   JLabel name = new JLabel("Enter in your name:");
 | |
|   text = new JTextField("Jennifer", 20); // 20 characters long, default value: Jennifer
 | |
|   area = new JTextArea(10, 10); //Width and Height is 10 characters big
 | |
|   JScrollPane sp = new JScrollPane(area); //Adds a scroll bar for the text area
 | |
|   button1 = new JButton("Press Me");
 | |
| 
 | |
|   // Set the Layout
 | |
|   // FlowLayout organizes each of the components top to bottom, left to right
 | |
|   setLayout(new FlowLayout()); 
 | |
| 
 | |
|   // Add the components to the screen
 | |
|   add(name);
 | |
|   add(text);
 | |
|   add(sp); // never add the textarea when surrounded by a ScrollPane
 | |
|   add(button1);
 | |
| }</code></pre>
 | |
| <h3>New Main Method</h3>
 | |
| <p>Finally, you need to create the Main method which will initiate it all</p>
 | |
| <pre><code class="language-java">public static void main(String[] args) {
 | |
|   firstGUI myFrame = new firstGUI();
 | |
| 
 | |
|   // End the program when the 'x' button (not keyboard) is pressed
 | |
|   myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 | |
| 
 | |
|   myFrame.setTitle("My title"); // Titles the window
 | |
|   myFrame.pack(); // Packs it all into the frame
 | |
|   myFrame.setVisible(true); // Makes the frame appear on the screen
 | |
| }</code></pre>
 | |
| <h3>Making it interactive</h3>
 | |
| <p>You need to change your class header to the following</p>
 | |
| <pre><code class="language-java">public class firstGUI extends JFrame implements ActionListener {
 | |
|   // ...</code></pre>
 | |
| <p>Then in your class, add the following method</p>
 | |
| <pre><code class="language-java">@Override public void actionPerformed(ActionEvent event) {
 | |
|   // Do stuff as a result of an event here
 | |
|   area.append("You Pressed the Button");
 | |
| }</code></pre>
 | |
| <p>To make it actually activate as a result of an event. You need to attach it to a swing component.</p>
 | |
| <p>For example, I want the code in <code>actionPerformed</code> to activate in result of a button press.</p>
 | |
| <p>Add the following line to your code in the constructor.</p>
 | |
| <pre><code class="language-java">//...
 | |
| button1 = new JButton("Press Me");
 | |
| button1.addActionListener(this); // New Code
 | |
| //....</code></pre>
 | |
| <h3>Identifying Button Pressed</h3>
 | |
| <p>How do you know which button was pressed in the <code>actionPerformed</code> method?</p>
 | |
| <p>You can use <code>event.getSource()</code> to find out.</p>
 | |
| <p>Example:</p>
 | |
| <pre><code class="language-java">@Override public void actionPerformed(ActionEvent event) {
 | |
|   if (event.getSource() == button1) { // Replace button1 with appropriate variable name
 | |
|     // Do things as a result of a specific button being pressed
 | |
|   }
 | |
| }</code></pre>
 | |
| <h3>Summary</h3>
 | |
| <p>To use Swing, do the following steps</p>
 | |
| <ol>
 | |
| <li>Import Libraries</li>
 | |
| <li>Declare J___ variables</li>
 | |
| <li>New the J___ variables</li>
 | |
| <li>Add the J___ variables to the frame</li>
 | |
| <li>Add the <code>ActionListener</code> to the components you wish to monitor</li>
 | |
| </ol>
 | |
|   </article>
 | |
| </main>
 | |
| 
 | |
| <script src="themes/bitsandpieces/scripts/highlight.js"></script>
 | |
| <script src="themes/bitsandpieces/scripts/mousetrap.min.js"></script>
 | |
| <script type="text/x-mathjax-config">
 | |
|   MathJax.Hub.Config({
 | |
|     tex2jax: {
 | |
|       inlineMath: [ ['$','$'], ["\\(","\\)"] ],
 | |
|       processEscapes: true
 | |
|     }
 | |
|   });
 | |
| </script>
 | |
| 
 | |
| <script type="text/javascript"
 | |
|     src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
 | |
| </script>
 | |
| <script>
 | |
|   hljs.initHighlightingOnLoad();
 | |
|   
 | |
|   document.querySelectorAll('.menuitem a').forEach(function(el) {
 | |
|     if (el.getAttribute('data-shortcut').length > 0) {
 | |
|       Mousetrap.bind(el.getAttribute('data-shortcut'), function() {
 | |
|         location.assign(el.getAttribute('href'));
 | |
|       });       
 | |
|     }
 | |
|   });
 | |
| </script>
 | |
| 
 | |
| </body>
 | |
| </html>
 |