Schriftart über einen Button ändern

JO2simpl

Mitglied
Hallo. Ich habs leider immer noch nicht geschaft bei diesem SpeedReader einen Button der die Schriftart ändert einzufügen und wollte deshalb erneut um Hilfe fragen ^^


Java:
package reader;

import javax.swing.*;   //used for user interface
import javax.swing.text.SimpleAttributeSet; //used for changing fonts
import javax.swing.text.StyleConstants; //text styles
import javax.swing.text.StyledDocument; //text styles
import java.awt.*;
import java.awt.event.ActionListener;   //listens for mouse clicks on buttons
import java.awt.event.ActionEvent;  //handles button press events
import java.io.FileNotFoundException;   //handles file exceptions
import java.io.FileReader;  //file reader for file input
import java.util.Scanner;   //scanner for input
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class Reader {

    JFrame guiFrame;    //initiate main window frame
    JPanel optPanel;    //initiate option panel
    JFileChooser fileDialog;    //initiate fileDialog
    JTextPane textPane;     //initiate textPane

    int pause = 265;    //set initial reading speed to 200wpm
    int f = 1;      //tracks the colour scheme
    String filePath;    //holds location of the selected file


    public static void main(String[] args) {
         //Use the event dispatch thread for Swing components
         EventQueue.invokeLater(new Runnable()
         {
            @Override
             public void run()
             {
                 new Reader();
             }
         });
    }

    public Reader() //Create JFrame and all components
    {
        guiFrame = new JFrame();    //create new instance of the main window
        guiFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);   //program will exit if window closed
        guiFrame.setTitle("Reader Window");     //title of main window
        guiFrame.setSize(500,200);      //set the size of the main window
        guiFrame.setLocationRelativeTo(null);   //put the window in the middle of the screen
        guiFrame.setLayout(new BorderLayout()); //initiate layout of guiframe

        fileDialog = new JFileChooser();//"C:\\Documents and Settings\\Owner\\My Documents" used to select file to read

        textPane = new JTextPane();     //create new instance of the textpane
        textPane.setEditable(false);    //user cannot edit text in textpane
        Font font = new Font("Serif", Font.BOLD, 22);   //set font and size
        textPane.setFont(font); //set font of textpane
        StyledDocument doc = textPane.getStyledDocument();  //styled document allows allignment options
        SimpleAttributeSet center = new SimpleAttributeSet();       //attribute set to control center alignment
        StyleConstants.setAlignment(center, StyleConstants.ALIGN_CENTER);   //Align text to the center
        doc.setParagraphAttributes(0, doc.getLength(), center, false);  //set formatting options
        textPane.setText("Choose a speed, open a file and start reading");  //initial contents of textpane
        textPane.setVisible(true);      //set textpane to visible
        guiFrame.add(textPane, BorderLayout.CENTER);    //add textpane with word output in center to guiframe

        optPanel = new JPanel();        //add an instance of optPanel
        optPanel.setLayout(new GridLayout(1,3));   //set layout of buttons 1 high by 3 wide
        guiFrame.add(optPanel,BorderLayout.NORTH);  //Put the buttons at the bottom of the window

        JButton openButton = new JButton("Open File");  //Create new button
        openButton.setActionCommand("Open File");
        openButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {   //event happens if file button pressed
                try {
                    openFile();     //call open file method to display file selection window
                } catch (Exception e) {     //catch exception
                    e.printStackTrace();    //used to identify problems
                }
            }
        });
        optPanel.add(openButton);   //add open file button to option panel

        JButton speedButton = new JButton("Select WPM");  //Create new button
        speedButton.setActionCommand("Select WPM");
        speedButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {   //event happens if user clicks button
                try {
                    setSpeed();     //call set speed method to display speed window
                } catch (Exception e) { //catch exception
                    e.printStackTrace();    //used to identify problems
                }
            }
        });
        optPanel.add(speedButton);  //Add speed selection button to option panel

        JButton changeColours = new JButton("change color");  //Add button to invert colour scheme
        changeColours.setActionCommand("change color");
        changeColours.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {    //event happens when user clicks button---
                try {
                    if (f == 1) {       //check the current color settings. Currently black on white
                          
                        textPane.setForeground(Color.blue);    //set text colour to white
                        f = 0;          //tracks colour settings
                    } else {                //check the current color settings. currently white on black
                        
                        textPane.setForeground(Color.green);
                        f = 1;          //tracks colour settings
                    }
                } catch (Exception e) {   //catch exception
                    e.printStackTrace();    //used to identify problems
                }
            }
        });
        optPanel.add(changeColours);    //add the colour button to option panel
        
         JSpinner changeFontSize = new JSpinner(
                new SpinnerNumberModel(22, 10, 78, 2));

        changeFontSize.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                textPane.setFont(textPane.getFont().deriveFont(
                    ((Number)changeFontSize.getValue()).floatValue()));
            }
        });
        optPanel.add(changeFontSize);
        
        guiFrame.setVisible(true);
    }

    //Show a open file dialog box
    private void openFile() throws Exception {  //exception needed to handle files
        int openChoice = fileDialog.showOpenDialog(guiFrame);   //display file chooser window
        if (openChoice == JFileChooser.APPROVE_OPTION){     //user selects a file from file chooser window
            filePath = fileDialog.getSelectedFile().getPath();  //set filepath as the path of the file selected in the filedialog window
            (new Thread(new displayText())).start();    //Start displayText method in separate thread to avoid gui freeze
        }
    }
    private void setSpeed(){        //Method called if speed button pressed
        String[] speeds = { "200", "300", "500", "800" };   //String holds values for drop down box
        JFrame frame = new JFrame("Input required speed in words per minute");  //new frame to select speed
        String speedChoice = (String) JOptionPane.showInputDialog(frame,    //option pane used for easy speed selection
                "What speed would you like?",   //display question to user
                "WPM",          //window title
                JOptionPane.QUESTION_MESSAGE,   //standard for option pane
                null,
                speeds, //add the string of speeds as options
                speeds[0]); //default is 200
        if(speedChoice.equals("200"))
            pause = 265;                    //187 words in 59.877s that's 187.38414wpm (without natural reading pauses)
        else if(speedChoice.equals("300"))
            pause = 160;                    //187 words in 38.522s that's 291.26215wpm (without natural reading pauses)
        else if(speedChoice.equals("500"))
            pause = 75;                     //187 words in 22.451s that's 499.75504wpm (without natural reading pauses)
        else if(speedChoice.equals("800"))
            pause = 28;                     //187 words in 14.006s that's 801.08527wpm (without natural reading pauses)
    }

    public class displayText implements Runnable {  //Run all the display text method within its own thread. Prevents the GUI from becoming unresponsive
        public void run(){
            Scanner in = null;     //Scanner to read the file at chosen location
            try {
                in = new Scanner(new FileReader(filePath));
            } catch (FileNotFoundException e) {   //ignore exception
                e.printStackTrace();    //used to identify problems
            }
            int i =0;       //Number of words in document
            while(in.hasNextLine()){        //read every line of file
                in.next();      //move to next word
                i++;            //increment word counter
            }
            in.close();     //Close Scanner after words have been counted

            try {
                in = new Scanner(new FileReader(filePath));     //New Scanner to start at top of file
            } catch (FileNotFoundException e) {   //ignore exception
                e.printStackTrace();    //used to identify problems
            }
            String[] word = new String[i];      //Array stores each word

            int n = 0;
            long start =0, end; //used to calculate words per minute
            float time;     //will hold time taken to finish article
            float wPM;         //will hold number of words per minute

            for(int k=0; k<i; k++){ //loop cycles through every word in file
                //FROM HERE
                if(k==0){       //check if at start of loop
                    start = System.currentTimeMillis();    //Start time used to calculate words per minute
                }
                else if(k==(i-1)){      //check if at end of loop
                    end = System.currentTimeMillis();   //end time used to calculate words per minute
                    time = (end-start);     //time taken = end time - start time
                    wPM = (60/(time/1000))*i;     //words per minute = time in minutes * words read
                    System.out.println(i + " words in " + (time/1000) + "s" + " that's " + wPM + "wpm");    //print results in system dialog
                }
                //TO HERE is just used to show how many words were read. Used to calculate how much pause to set.

                word[k] = in.next();        //get next word from file
                //Natural reading speeds and pauses attempt (needs research)
                if(word[k].length()>=5 && word[k].length()<=8) n = 100;     //short pause for words with 5-8 characters
                else if(word[k].length()>=9 && word[k].length()<=12) n = 150;   //medium pause for words with 9-12 characters
                else if(word[k].length()>12) n = 200;       //long pause for words over 12 characters
                for(int j=0; j<word[k].length(); j++){      //loop cycles through length of word
                    if(word[k].charAt(word[k].length()-1) == '.')   //Add pause after a full stop
                        n += 50;
                    if(word[k].charAt(word[k].length()-1) == ',')   //Add slight pause after a comma
                        n += 30;
                }
                textPane.setText(word[k]);  //Set the word in the text pane to the word read from file
                sleep(pause+n);     //call sleep method to add a pause after the word. n adds custom pause
                n=0;            //n set back to 0 after each word
            }
        }
    }

    private void sleep(int i) {     //Adds a pause between words. i changes length of pause
        try {
            Thread.sleep(i);        //sleep thread for pause+n milliseconds
        } catch(InterruptedException e) {   //exception needed for sleep
            //do nothing
        }
        
        
    }

  




}
 

mihe7

Top Contributor
Java:
        JComboBox<String> changeFont = new JComboBox<>(GraphicsEnvironment.
            getLocalGraphicsEnvironment().getAvailableFontFamilyNames());
        changeFont.addActionListener(e -> 
                textPane.setFont(new Font(changeFont.getItemAt(changeFont.getSelectedIndex()), 
                    Font.PLAIN,
                    ((Number)changeFontSize.getValue()).intValue())));
        optPanel.add(changeFont);
Wieder vor guiFrame.setVisible(true); einfügen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Augenblau JavaFX Externe Schriftart über CSS ansprechen und zuweisen AWT, Swing, JavaFX & SWT 5
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing Externe Schriftart mitkompilieren für andere PCs? AWT, Swing, JavaFX & SWT 3
G Frame,Font,Standard,Schriftart,JFrame AWT, Swing, JavaFX & SWT 3
N Swing Schriftart einer JList AWT, Swing, JavaFX & SWT 4
R JEditorPane Schriftart und Schriftgröße AWT, Swing, JavaFX & SWT 3
P Schriftart setzen für die ganze Applikation AWT, Swing, JavaFX & SWT 3
& eigene Schriftart in JEditorpane AWT, Swing, JavaFX & SWT 2
A Font: Ist Schriftart überall verfügbar? AWT, Swing, JavaFX & SWT 4
T Methode getFont() - wie hier Schriftart/-größe beeinflussen? AWT, Swing, JavaFX & SWT 4
P TitledBorder Schriftart- typ AWT, Swing, JavaFX & SWT 2
G JTextArea - Schriftart ändern AWT, Swing, JavaFX & SWT 18
K JOptionPane: Schriftart ändern AWT, Swing, JavaFX & SWT 6
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
T Scene wechseln über ManuItem AWT, Swing, JavaFX & SWT 7
I JavaFX - Pane wechseln über 2. Controller AWT, Swing, JavaFX & SWT 5
melaniemueller Layout wechseln über RadioButtons AWT, Swing, JavaFX & SWT 4
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
A Layoutwechsel über RadioButtons AWT, Swing, JavaFX & SWT 3
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
missy72 JavaFX Performance / ImageView in TableView über TimeLine AWT, Swing, JavaFX & SWT 1
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
J Spielfelder auch über die Tastatureingabe (1…9) ansteuern (Tic Tac Toe) AWT, Swing, JavaFX & SWT 2
M Eine Datei auf den Apache Server hochladen - über das Menü im JavaProgramm AWT, Swing, JavaFX & SWT 7
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
G LayoutManager Panels anordnen über Schleifenvariablen AWT, Swing, JavaFX & SWT 7
F Verzeichnis über GUI erstellen AWT, Swing, JavaFX & SWT 2
T GUI über Tastatur bedienen AWT, Swing, JavaFX & SWT 3
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
L JavaFX TreeView Edit Mode über F2 AWT, Swing, JavaFX & SWT 13
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
C JavaFX ScrollPane schießt über das Ziel hinaus... AWT, Swing, JavaFX & SWT 1
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
L JavaFX Hover Effekt über das Parent Element AWT, Swing, JavaFX & SWT 4
C JavaFX GUI - Entscheidung über Framework AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
S AWT Daten über TextField und Button in array speichern AWT, Swing, JavaFX & SWT 5
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
Z JAVAFX Stage über Controller weitergeben um css-file zu laden AWT, Swing, JavaFX & SWT 4
Z Absolutes Layout / Kontrolle über Anordnung AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Zugriff auf Guiobjekte die über FXML erstellt wurden AWT, Swing, JavaFX & SWT 2
O JTextfield wird über'drawed'.. AWT, Swing, JavaFX & SWT 6
K JavaFX Fenster aufrufen über Menü AWT, Swing, JavaFX & SWT 1
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
kaoZ Swing JFrame lässt sich nicht über dispose() abbauen AWT, Swing, JavaFX & SWT 0
P Vorteile von Tooltip nutzen (wird über allen anderen Objekten angezeigt) AWT, Swing, JavaFX & SWT 3
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
B Swing Borderlayout East über North AWT, Swing, JavaFX & SWT 5
D Swing Letzte Zeile einer JTable nicht über RowSorter sotieren AWT, Swing, JavaFX & SWT 2
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
3 JDialog über einem Vollbildfenster anzeigen AWT, Swing, JavaFX & SWT 5
K GUI Elemente über eine separate Textdatei beschriften? AWT, Swing, JavaFX & SWT 4
A Bild über Imageviewer auf GUI anzeigen AWT, Swing, JavaFX & SWT 3
K 2D-Grafik Kontrastanpassung über einen JSlider AWT, Swing, JavaFX & SWT 2
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
L Button über/auf JTextField AWT, Swing, JavaFX & SWT 5
A Swing JTable wird nicht über zurückegebene Referenz geaddet.Wieso nicht? AWT, Swing, JavaFX & SWT 5
D JTextField über ein Game AWT, Swing, JavaFX & SWT 11
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
R JTextField mit abgerundeten Ecken - Geht über Grenze hinaus AWT, Swing, JavaFX & SWT 4
S JDialog direkt über dem MainFrame aufpoppen lassen AWT, Swing, JavaFX & SWT 2
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
P versch. JPanel Klassen über Menü öffnen AWT, Swing, JavaFX & SWT 12
P Öffnen, Speichern von Dat. über DialogBoxen AWT, Swing, JavaFX & SWT 10
R Bewglichen Rahmen über einem Bild AWT, Swing, JavaFX & SWT 3
P Listenelemente über Checkbox löschen AWT, Swing, JavaFX & SWT 6
H Swing "Drag and Drop" eines JComponent über ein JPanel AWT, Swing, JavaFX & SWT 2
S SWT Anzeigen einer lokalen HTML-Seite im Browser Widget über RAP nicht möglich AWT, Swing, JavaFX & SWT 3
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
M TextArea über mehrere Zeilen - wie Zeileanzahl abfragen? AWT, Swing, JavaFX & SWT 5
C Linien über GridLayout zeichnen AWT, Swing, JavaFX & SWT 3
S JDialog über Applet AWT, Swing, JavaFX & SWT 3
K Swing JButton über JLabel AWT, Swing, JavaFX & SWT 6
S AWT Skalieren von Polygon über Area klappt nicht AWT, Swing, JavaFX & SWT 4
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
L LayoutManager Componenten über verfügbaren Platz strecken AWT, Swing, JavaFX & SWT 7
C Java-applikation über Fullscreen AWT, Swing, JavaFX & SWT 4
F Panels über buttons zu anderen Panels hinzufügen AWT, Swing, JavaFX & SWT 2
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben