Integers in jButtons weiterverwenden

Shariner

Mitglied
Hallo,

ich finde meine Frage sehr schwer zu beschreiben.

Ich habe 2 jButtons.

jButton1:

[Java]Random rn = new Random(); int Low = 0;
int High = 101;
int FinalInt = rn.nextInt(High-Low) + Low;
System.out.println(FinalInt);
jTextArea1.setText("Eine Zahl wurde gewählt.") ;
[/Java]

jButton2:

Java:
String Zahl = jTextField1.getText();
        System.out.println(Zahl);
        int Give = Integer.parseInt(Zahl);
        System.out.println(Give);
        
         if (FinalInt < Give){
            //Hier ist der Punkt wo es scheitert, FinalInt gibt es laut NetBeans gar nicht.

FinalInt "existiert" aber nicht laut NetBeans.

Ich muss irgendwie den Integer aus jButton1 dazu bringen das der jButton2 ebenfalls auf den zugreifen kann..


Sinn des ganzen: Sinn soll ein super simples Zahlenspiel sein das ich aber endlich mal nicht nur in der Konsole sondern über ein GUI spielen will.

mit freundlichen Grüßen

Björn
 
Zuletzt bearbeitet:

knilch

Bekanntes Mitglied
Hi,
Es ist in deinen codesnippets nicht zu sehen, wie du die ActionListeners der beiden Button implementiert hast.
Daher kann ich nicht sagen, ob FinalInt im zweiten Snippet sichtbar ist oder nicht.
Hier mal ein Beispiel wie es vielleicht gehen könnte.
Java:
public class Test {
    private JFrame frame;
    private JPanel panel;
    private JButton [] buttons;
    private JTextField textField;
    public static void main(String[] args) {
        Test t = new Test();
        t.initComponents();
    }

    private void initComponents() {
        frame = new JFrame();
        panel = new JPanel();
        buttons = new JButton[4];
        textField = new JTextField();
        String btnName;

        frame.setSize(200, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel.setLayout( new java.awt.GridLayout( 4, 4 ) );
        panel.add(textField);

        for (int i = 0; i < buttons.length; i++) {
            btnName ="button" + (i+1);
            buttons[i] = new JButton(btnName);
            buttons[i].addActionListener(new ButtonListener());
            panel.add(buttons[i]);        
        }

        frame.add(panel);

        frame.pack();
        frame.setVisible(true);
    }

    private class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            int finalInt = 0;
            int give = 0;
            if(e.getSource() == buttons[0]) {
                Random rn = new Random();       
                int low = 0;
                int high = 101;
                finalInt = rn.nextInt(high-low) + low;
                System.out.println(finalInt);
                textField.setText("Eine Zahl wurde gewählt.") ;
            }
            if( e.getSource() == buttons[1] ){
                String zahl = textField.getText();
                System.out.println(zahl);
                try {
                    give = Integer.parseInt(zahl);
                }
                catch(NumberFormatException ex) {
                    System.err.println("Keine Zahl vorhanden");
                }
                System.out.println(give);

                if (finalInt < give){
                    System.out.println("yes");
                }
                else {
                    System.out.println("no");
                }
            }
        }
    }
}
ps. Variablen sollten wegen besserer Lesbarkeit stets CamelCase benannt werden...
 
Zuletzt bearbeitet:

Shariner

Mitglied
Das du die ActionListener nichts sehen kannst liegt daran das ich die gar nicht drinnen hab.

Das Ding ist das ich das erste Mal mit Guis arbeite und nirgends eine ordentliche Einleitung dazu finden konnte.

Ich hab ein bisschen gegoogelt und hab dabei auch schon den Namen ActionListener gelesen. MIr war eigentlich sofort klar dass das DAS ist was ich brauche, aber fand nicht wie zum Henker ich die denn jetzt in den Code einbaue.

Ich leg jetzt mal den Laptop weg, starte den PC und schaue wie und ob ich deinen Code übertragen kann und danach auch verstehe :)

Dankesehr.

mfg Björn

P.S. Zur CamelCase Benennung: Ich probier mein bestes, indem Fall oder weil ich gesundheitlich noch angeschlagen bin, fiel mir nichts sinnvolles ein und bin selber schon fast durcheiander gekommen. Genauso wenig wie ich auf allgemeine Strukturen geachtet habe und Methoden etc. nicht mit kleinem Buchstaben angefangen habe... Ich sollte mich mehr konzentrieren...
 
Zuletzt bearbeitet:

Shariner

Mitglied
Ich komm nicht dahinter.

Vielleicht kannst du mir helfen. Hier hast du mal den kompletten Code. Habe den auch endlich mal verständlich gemacht.

Ich mein, das kann doch nicht so blöde kompliziert sein. Eigentlich müsste ich doch sogar nur Rechtsklick auf den Button machen-->Event-->ActionListener - Aber da ist nur die ActionPerformed Sache drin.

Java:
/* * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */






package my.Zahlenspiel;
import java.util.Random;
/**
 *
 * @author SharinerLP
 */
public class Zahlenspiel extends javax.swing.JFrame {


    /**
     * Creates new form Zahlenspiel
     */
    public Zahlenspiel() {
        initComponents();
    }


    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {


        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jTextField1 = new javax.swing.JTextField();
        jButton2 = new javax.swing.JButton();


        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);


        jButton1.setText("Spiel starten");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });


        jTextArea1.setEditable(false);
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jTextArea1.setText("Drücke auf \"Spiel starten\".");
        jTextArea1.setAutoscrolls(false);
        jScrollPane1.setViewportView(jTextArea1);


        jButton2.setText("Zahl absenden");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });


        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(62, 62, 62)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 265, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(132, 132, 132)
                        .addComponent(jButton1)
                        .addGap(38, 38, 38)
                        .addComponent(jButton2))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(150, 150, 150)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(34, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(60, 60, 60)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 109, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2))
                .addGap(65, 65, 65))
        );


        pack();
    }// </editor-fold>                        


    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
       
       Random rn = new Random();        //Erstellt eine zufällige Zahl zwischen 0 und 100
       int low = 0;
       int high = 101;
       int loesung = rn.nextInt(high-low) + low;
        System.out.println(loesung);            //Zeigt die gesuchte Zahl in der Konsole an. Nur zur Überprüfung aktivieren
        jTextArea1.setText("Eine Zahl wurde gewählt.") ;        //Setzt den Text damit es los gehen kann
        
    }                                        


    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
       
        
        String Zahl = jTextField1.getText();
        //System.out.println(Zahl);             //Nur zur Überprüfung zu aktivieren
        int eingabeZahl = Integer.parseInt(Zahl);
        //System.out.println(eingabeZahl);      //Nur zur Überprüfung zu aktivieren
        
         if (Loesung < eingabeZahl){
            jTextArea1.setText("Die gesuchte Zahl ist höher."); 
        }
         else{
             jTextArea1.setText("Die gesuchte Zahl ist niedriger.");
         }
    }                                        


    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url=http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look and Feel (The Javaâ„¢ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Zahlenspiel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Zahlenspiel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Zahlenspiel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Zahlenspiel.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>


        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Zahlenspiel().setVisible(true);
            }
        });
    }


    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   
}
 

knilch

Bekanntes Mitglied
Hi,
das Problem liegt wie ich vermutet habe, in der Sichtbarkeit der Variable loesung. Diese definierst du in jButton1ActionPerformed() und möchtest in jButton2ActionPerformed() darauf zugreifen. Die Mehtode jButton2ActionPerformed() weiss aber nichts von loesung.
Du kannst das so machen:
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.LayoutStyle;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;

/**
 *
 * @author SharinerLP
 */
public class Zahlenspiel extends JFrame {
    private static final long serialVersionUID = -3672544661354473308L;
    private int loesung ;
    private JButton jButton1;
    private JButton jButton2;
    private JScrollPane jScrollPane1;
    private JTextArea jTextArea1;
    private JTextField jTextField1;

    /**
     * Creates new form Zahlenspiel
     */
    public Zahlenspiel() {
        initComponents();
    }


    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new JButton();
        jScrollPane1 = new JScrollPane();
        jTextArea1 = new JTextArea();
        jTextField1 = new JTextField();
        jButton2 = new JButton();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("Spiel starten");
        jButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTextArea1.setEditable(false);
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jTextArea1.setText("Drücke auf \"Spiel starten\".");
        jTextArea1.setAutoscrolls(false);
        jScrollPane1.setViewportView(jTextArea1);


        jButton2.setText("Zahl absenden");
        jButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                                .addGroup(layout.createSequentialGroup()
                                        .addGap(62, 62, 62)
                                        .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 265, GroupLayout.PREFERRED_SIZE))
                                        .addGroup(layout.createSequentialGroup()
                                                .addGap(132, 132, 132)
                                                .addComponent(jButton1)
                                                .addGap(38, 38, 38)
                                                .addComponent(jButton2))
                                                .addGroup(layout.createSequentialGroup()
                                                        .addGap(150, 150, 150)
                                                        .addComponent(jTextField1, GroupLayout.PREFERRED_SIZE, 61, GroupLayout.PREFERRED_SIZE)))
                                                        .addContainerGap(34, Short.MAX_VALUE))
                );
        layout.setVerticalGroup(
                layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 23, GroupLayout.PREFERRED_SIZE)
                        .addGap(60, 60, 60)
                        .addComponent(jTextField1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 109, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                                .addComponent(jButton1)
                                .addComponent(jButton2))
                                .addGap(65, 65, 65))
                );

        pack();
    }// </editor-fold>                        


    private void jButton1ActionPerformed(ActionEvent evt) {                                         

        Random rn = new Random();        //Erstellt eine zufällige Zahl zwischen 0 und 100
        int low = 0;
        int high = 101;
        loesung = rn.nextInt(high-low) + low;
        System.out.println(loesung);            //Zeigt die gesuchte Zahl in der Konsole an. Nur zur Überprüfung aktivieren
        jTextArea1.setText("Eine Zahl wurde gewählt.") ;        //Setzt den Text damit es los gehen kann

    }                                        

    private void jButton2ActionPerformed(ActionEvent evt) {                                         

        String Zahl = jTextField1.getText();
        //System.out.println(Zahl);             //Nur zur Überprüfung zu aktivieren
        int eingabeZahl = Integer.parseInt(Zahl);
        //System.out.println(eingabeZahl);      //Nur zur Überprüfung zu aktivieren

        if (loesung < eingabeZahl){
            jTextArea1.setText("Die gesuchte Zahl ist höher."); 
        }
        else{
            jTextArea1.setText("Die gesuchte Zahl ist niedriger.");
        }
    }                                        


    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see <a href="http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html" target="_blank">How to Set the Look and Feel (The Javaâ„¢ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)</a> 
         */
        try {
            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Zahlenspiel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(Zahlenspiel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Zahlenspiel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(Zahlenspiel.class.getName()).log(Level.SEVERE, null, ex);
        }
        //</editor-fold>


        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Zahlenspiel().setVisible(true);
            }
        });
    }
}
 
Zuletzt bearbeitet:

Shariner

Mitglied
Danke! Danke! Danke!

Es funktioniert,

Eine kleine Frage. Bei meinem Code wurde viel automatisch generiert. Das automatisch generierte konnte ich nicht bearbeiten. Ich hab eben eine neue Java Klasse erstellt und alles rein kopiert. Es funktioniert, doch habe ich leider nicht mehr das praktische Design mit den Text Feldern die ich einfach drauf ziehen kann.

Kann ich irgendwie NetBeans dazu verleiten das ich meinen automatisch generierten Code wieder bearbeiten kann?

Programm läuft jetzt wie es soll, jetzt kommen noch ein paar Gimmicks dazu dann ist es perfekt. Danke!

LG Björn
 

Shariner

Mitglied
Alles klar, hab ein bisschen mit Notepad++ im Source Code gepfuscht und alles reinkopiert. Die Design Oberfläche läuft nur noch im Read Only Modus. Ich verstehe nicht ganz wie du das geändert hast das bei mir das GUI komplett hin ist...

Kannst du mir jetzt bitte für mein Verständniss erklären was die entscheidenen Zeilen dafür sind damit die Knööpfe untereinander zugreifen können? Wenn ich das durch den Text Comparer haue sind das irre viele Zeilen.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Alles klar, hab ein bisschen mit Notepad++ im Source Code gepfuscht und alles reinkopiert. Die Design Oberfläche läuft nur noch im Read Only Modus. Ich verstehe nicht ganz wie du das geändert hast das bei mir das GUI komplett hin ist...

Das liegt daran das der Designer den Code in einer bestimmten Form erwartet, sobald diese nicht mehr vorhanden ist kann der Designer nicht mehr richtig arbeiten.

Daher ist es auch nicht ratsam einfach Code aus dem Internet einfach 1:1 zu kopieren.
Speichere dir Code Beispiele extra ab und vergleiche den Code mit deinem eigenen, damit erkennst du was anderes gemacht wurde.

Kannst du mir jetzt bitte für mein Verständniss erklären was die entscheidenen Zeilen dafür sind damit die Knööpfe untereinander zugreifen können? Wenn ich das durch den Text Comparer haue sind das irre viele Zeilen.

Der wirklich brauchbare Unterschied: Die Variable "loesung" welche in deiner Version in der Methode "jButton1ActionPerformed" deklariert und initialisiert wurde ist nun eine Instanzvariable (sichtbar in der ganzen Klasse solange das Objekt besteht).
Aber genau die selbe Beschreibung hat dir Knilch auch mit seinem Post gegeben.
 
Zuletzt bearbeitet:

Shariner

Mitglied
Kennt Ihr das? Manchmal versteht es einfach nicht? Hab mich gerade eben mal drangesetzt, ein Blick drauf geworfen. Da ist mir was aufgefallen und nun funktionierts.

Wunderbar ich danke euch beiden. Der Fehler wird mir nie wieder passieren. Das Projekt hab ich nun neu erstellt sodass ich wieder neue Design Flächen erstellen kann.

LG Björn
 

Ähnliche Java Themen

Neue Themen


Oben