Discord

  • Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Erledigt Programm temporären Text im JFrame anzeigen lassen

Payno4

Schafhirte
Mitglied seit
12 Februar 2015
Beiträge
124
Hallo Community,
Wie kann ich in einem JFrame den Text einer Komponente ändern ?
Ich habe es schon auf verschiedene Arten und Weißen probiert , doch leider ändert sich der Text bei mir nicht...

Meine Ansätze:
Code:
    /**
    * Create the application.
    */

    public startFrame() {

        initialize();
        off = true;

        JFormattedTextField jftf = null;

        ArrayList<String> als = new ArrayList<>();

        als.add("Test 1");

        als.add("Test 2");

       

        Thread t = new Thread(newRunnable() {

            @Override

            public void run() {

                EntryPoint.writeDebug("1");

                scrollMessages(als, jftf);

                EntryPoint.writeDebug("2");

            }

        });
        t.start();
    }



    /**

    * Initialize the contents of the frame.

    */

    privatevoidinitialize() {

       

        frmMain = new JFrame();

        frmMain.getContentPane().setForeground(Color.WHITE);

        frmMain.getContentPane().setBackground(Color.WHITE);

        frmMain.addWindowListener(newWindowAdapter() {

            @Override

            publicvoidwindowClosing(WindowEvente) {

                StringinputValue = JOptionPane.showInputDialog("Password to close the task");

               

                if(inputValue.contains(EntryPoint.getPassword()) && inputValue != null) {

                    System.exit(0);

                }

            }

        });

        frmMain.setTitle("Main");

        frmMain.setBounds(100, 100, 800, 480);

        frmMain.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    }

   

    private void scrollMessages(ArrayList<String> als, JFormattedTextField varText) {

        varText.setVisible(false);

        varText = new JFormattedTextField();

       

        Random r = new Random();

        int i = r.nextInt(als.size());

       

        EntryPoint.writeDebug(als.get(i));

        varText.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));

        varText.setBounds(345, 295, 312, 26);

        varText.setText(als.get(i));

        varText.setEditable(false);

        varText.setVisible(true);

        frmMain.getContentPane().add(varText);

       

        if(off == false) {

            try {

                varText.updateUI();

                varText.update(varText.getGraphics());

                wait(400);

                scrollMessages(als, varText);               

            } catch (InterruptedExceptione) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }



        }

    }
Das Problem bei dem Ansatz ist , dass sobald die Methode "ScrollMessages(ArrayList<String>, JFormattedTextField)" aufgerufen wird das JFormattedTextField nicht mal erstellt wird.

Schon mal danke im Voraus :)
 

FraxDzn

Minecrafter
Mitglied seit
21 Juli 2018
Beiträge
21
varText = new JFormattedTextField(); mach mal das Weg und stattdessen du es dort erschaffst mache es gleich dort wo du es null gesetzt hast vllt. geht das
also dort JFormattedTextField jftf = null;

kann erstmal nicht zurückschreiben
 

JTK222

Threadripper
Osterei Experte
Mitglied seit
5 September 2013
Beiträge
1.137
Minecraft
JTK222
Mach das feld jftf in deiner JFrame globa, kannst du dann in anderen method dann bearbeiten.
Also einmal global und dein TextField diesem Feld zuordnen.
 
Zuletzt bearbeitet:

Payno4

Schafhirte
Mitglied seit
12 Februar 2015
Beiträge
124
Erstmal danke für die Antworten , aber leider funktionieren beide nicht. :(
 

JTK222

Threadripper
Osterei Experte
Mitglied seit
5 September 2013
Beiträge
1.137
Minecraft
JTK222
Um ganz ehrlich zu sein, ich komme mit deinem Source Code nicht klar.
Ich habe mir das ganze mal in einen Editor rein kopiert und du versuchst auf Locale Variablen einer anderen Method zu zu greifen?
Initialisierst eine null Variable die du als Lokale Variable hast neu. Ganz im ernst, dass sieht aus als ob es entweder in Notepad geschrieben wurde. Und von jemanden der nie Programmiert hat.
(Vermutlich weil recht viele teile vom Code fehlen)

Im Grunde ist alles was du machen musst, eine Globale JFormattedTextField variable zu haben. Diese am besten direkt zu initialisieren, sämtliche andere Initialisierungen zu entfernen.
Und in Zukunft wenn du den text ändert willst, einfach nur .setText dieser Variable aufrufen.
 
Zuletzt bearbeitet:

Payno4

Schafhirte
Mitglied seit
12 Februar 2015
Beiträge
124
Ich habe es gelöst , hatte irgendwie einen Tunnelblick :)
So funktionierts :

Auschnitt aus der initialize()-Methode
Code:
        JLabel lblJlabel = new JLabel("JLabel");

        lblJlabel.setHorizontalAlignment(SwingConstants.CENTER);

        lblJlabel.setBounds(320, 282, 370, 34);

        frmMain.getContentPane().add(lblJlabel);

       

        Threadt = newThread(newRunnable() {

           

            @Override

            publicvoidrun() {

                booleanb = true ;

                // [B]TODO[/B] Auto-generated method stub

                while(true) {

                   

                    try {

                        Thread.sleep(1000);

                    } catch (InterruptedExceptione) {

                        // [B]TODO[/B] Auto-generated catch block

                        e.printStackTrace();

                    }

                    Random r = new Random();

                    int i = r.nextInt(als.size());

                    lblJlabel.setText(als.get(i));

                }

               

            }

        });

        t.start();
[Code]
[Spoiler]
 
Oben