# Button eigenschaften bearbeiten



## KingArtus (15. Sep 2008)

Hallo, ich habe ein kleine Java Programm, einfach nur ein Knopf, der mich beim Klicken zu einem Ordner leitet und mir diesem im Explorer öffnet. der Knopf zeigt mir auch immer an wie viele PDF's ich in diesem Ordner habe...

nun muss ich es irgendwie schaffe, dass diese Eigenschaften, Also "Pfad" und text der angezeigt wird, Variabel ist und zu ändern ist, it einer TXT oder so, ich weiß nicht genau wie... könnte mir jemand Helfen? ich hab echt keinen schimmer und brauch dringent Hilfe.

Kenn mich mit Java gar nicht aus. :-(


hier mal dass was ich schon habe:

```
import javax.swing.JButton;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
* This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
* Builder, which is free for non-commercial use. If Jigloo is being used
* commercially (ie, by a corporation, company or business for any purpose
* whatever) then you should purchase a license for each developer using Jigloo.
* Please visit [url]www.cloudgarden.com[/url] for details. Use of Jigloo implies
* acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
* PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
* ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class NewJFrame extends javax.swing.JFrame {

   {
      // Set Look & Feel
      try {
         javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   private JButton jButton1;

   /**
    * Auto-generated main method to display this JFrame
    */
   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            NewJFrame inst = new NewJFrame();
            inst.setLocationRelativeTo(null);
            inst.setVisible(true);
         }
      });
   }

   public NewJFrame() {
      super();
      initGUI();
   }

   private void initGUI() {
      try {
         final File verzeichnis = new File("/usr"); // Hier muss natürlich dann dein
                                    // Pfad angegeben werden
         if (verzeichnis.exists()) {
            int iAnzahlPDF = verzeichnis.listFiles(new FileFilter() {
               public boolean accept(File pathname) {
                  return pathname.getName().matches(".+\\.(?i)pdf");
               }
            }).length;
            // System.out.println(iAnzahlPDF);
            
            jButton1 = new JButton();
            jButton1.addActionListener(new ActionListener() {

               @Override
               public void actionPerformed(ActionEvent e) {
                  try {
                     Desktop.getDesktop().open(verzeichnis);
                  } catch (IOException e1) {
                     // TODO Auto-generated catch block
                     e1.printStackTrace();
                  }
                  
               }
               
            });
            getContentPane().add(jButton1);
            jButton1.setText(String.valueOf(iAnzahlPDF + " Neue FAXE"));
            jButton1.setBounds(0, 186, 115, 21);

         }
         getContentPane().setLayout(null);
         setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

         pack();
         this.setSize(123, 241);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

}
```

Danke im Vorraus

KingArtus


----------



## KingArtus (15. Sep 2008)

Wichtig ist halt, dass ich dass ändern kann und es nach dem Schließen und Starten immer noch gültig ist.


----------



## Marco13 (15. Sep 2008)

Ja, nicht "schöne", aber am einfachsten wäre wohl das in einer Datei zu speichern

```
String verzeichnis = "/usr";
String dateiname = "MeinPfad.txt";
File file = new File(dateiname);
if (file.exists())
{
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file));
    verzeichnis = br.readLine();
}
else
{
    ???
}
```
Da kann man auch noch andere Sachen reinschreiben, die man mit br.readLine() dann zeilenweise lesen kann...


----------



## Guest (15. Sep 2008)

ich habe nur ein Problem...

ich möchte im Prinzip, dass man später per Knopfdruck einenn Weiteren Button Hinzufügen kann, dass es dann 2, 3, 4, 5 halt bis zu 10 buttens sein sollen und diese sollen einzeln zu Konfigurieren sein... ich verzweifel nur daran.
da müsste ich ja mit unterschiedlichen TXT arbeiten weiß aber nicht wie

KingArus


----------



## Marco13 (15. Sep 2008)

Ja, von Anfang an zu beschreiben, was man eigentlich erreichen will, ist schon eine Kunst :roll:
Wonach soll entschieden werden, was dort wann angezeigt wird?
Wenn sozusagen "die verfügbaren Buttons aus einer TXT-Datei gelesen werden sollen" muss diese Datei natürlich schon beim Erstellen des GUI gelesen werden. Es gibt beliebige viele mögliche Lösungen dafür, und welche die für dich am besten geeignete ist, .... ja, das sind die Entscheidungen, für die man als Softwareentwickler eben das Geld bekommt.


----------



## KingArtus (15. Sep 2008)

ich bin weit davon entfernt Softwareentwickler zu sein, sehr weit... daher hoffe ich ja auf Hilfe 

man kann es ja auch versteifen... 
5-10 Feste knöpfe, Buttons, die man dann halt einzeln Konfigurieren kann, einmal den Ordner, der überwacht werden soll und einmal der Text, der angezeigt werden soll hinter den Zahlen Also...

5 "neue FAXE" achtet auf PDF's im Ordner c:/xyz/bla/FAX
22"neue Dateien" achtet auf PDF's im Ordner c:/xyz/bla/dateien
 bei mir ist dass diese Stelle (für den einen Knopf den ich habe):

jButton1.setText(String.valueOf(iAnzahlPDF + " Neue FAXE")); 

aber dass wisst ihr ja wahrscheinlich besser als ich

und das Verzeichniss 

final File verzeichnis = new File("/usr");


Ich dachte ursprünglich man könnte (EINFACH) ein Leres Fenster mit einem Kleinem Button "+" haben, wenn ich darauf klicke kommt ein Button, der am Ende nen "EDIT" knopf hat über den ich dann die beiden Notwendigen daten angebe.

Von dem EINFACH bin ich nun weg, und fürchte fadst, dass ich dass nicht hinbekommen werde wir ich mir dass gedacht habe :-(

KingArtus


----------



## Marco13 (15. Sep 2008)

Ja, hier mal FIES GEHACKT aber mit den wichtigsten Funktionen: Eine Datei "Paths.txt" im gleichen Verzeichnis wird als Eingabe verwendet. Die Datei sollte enthalten

Verzeichnisname
Info
Verzeichnisname
Info
Verzeichnisname
Info

z.B.

C:/Windows
Dateien im Windows-Verzeichnis
C:/Windows/System
Dateien im Windows-System-Verzeichnis


Mit dem "new"-Button kann man Einträge zu dieser Datei hinzufügen (hart verdrahtet, du müßtest die Eingabe vom User holen - siehe die Links im Quellcode)


```
//For [url]http://www.java-forum.org/de/posting.php?mode=reply&t=74910[/url]

import javax.swing.JButton;

import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.io.FileFilter;
import java.io.IOException;

class NewJFrame extends javax.swing.JFrame
{
    {
        // Set Look & Feel
        try
        {
            javax.swing.UIManager
                    .setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    /**
     * Auto-generated main method to display this JFrame
     */
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                NewJFrame inst = new NewJFrame();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }

    public NewJFrame()
    {
        super();
        initGUI();
    }

    private void initGUI()
    {
        getContentPane().setLayout(new GridLayout(0,1));
        try
        {
            String dateiname = "Paths.txt";
            File file = new File(dateiname);
            if (file.exists())
            {
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(new FileInputStream(file)));
                while (true)
                {
                    String verzeichnisName = br.readLine();
                    if (verzeichnisName == null)
                    {
                        break;
                    }
                    String info = br.readLine();

                    createButton(verzeichnisName, info);
                }
                br.close();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        createAddButton();
        pack();
    }



    private void createAddButton()
    {
        JButton addButton = new JButton("New...");
        addButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                // FileChooser und Dialog verwenden, um Verzeichnis und InfoString zu
                // holen (siehe [url]http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html#input[/url]
                // und [url]http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html[/url])
                String directory = "C:/windows";
                String info = "Some info";
                try
                {
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Paths.txt", true)));
                    bw.write(directory+"\n");
                    bw.write(info+"\n");
                    bw.close();
                }
                catch (Exception ex)
                {
                    ex.printStackTrace();
                }
                getContentPane().removeAll();
                initGUI();
            }
        });
        getContentPane().add(addButton);

    }




    private void createButton(String verzeichnisName, String info)
    {
        System.out.println("Erstelle Button for "+verzeichnisName+" mit info "+info);
        try
        {
            final File verzeichnis = new File(verzeichnisName);
            if (!verzeichnis.exists())
            {
                System.err.println("Verzeichnis "+verzeichnisName+" existiert nicht");
            }
            else
            {
                int iAnzahlPDF = verzeichnis.listFiles(new FileFilter()
                {
                    public boolean accept(File pathname)
                    {
                        return pathname.getName().matches(".+\\.(?i)pdf");
                    }
                }).length;

                JButton jButton1 = new JButton();
                jButton1.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        try
                        {
                            Desktop.getDesktop().open(verzeichnis);
                        }
                        catch (IOException e1)
                        {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }

                    }

                });
                getContentPane().add(jButton1);
                jButton1.setText(String.valueOf(iAnzahlPDF + " " +info));
            }
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}
```


----------



## Guest (15. Sep 2008)

Perfekt...

das ist krass, respeckt...
hat zwar ein paar kleine Macken aber die kann ich ja mal sehen ob ich die Mit der Zeit raus bekomme *g*

Nun habe ich nur noch eine kleine Frage 

wie Mache ich dass nun dass sich die info auf den Knopf alle 5 Min/300 Sec aktualisiert?
der Code dafür ist glaube ich :





> Thread thread = new Thread(new Runnable() {
> @Override
> public void run() {
> while(true) {
> ...


----------



## Marco13 (15. Sep 2008)

Im Prinzip kannst du das - wie es ist - einesetzen in den Konstruktor (also in "public NewJFrame()") und dann die Zeile
// update GUI
ersetzen durch

```
SwingUtilitites.invokeLater(new Runnable()
{
    public void run()
    {
        getContentPane().removeAll();
        initGUI(); 
    }
});
```
aber du solltest das ganze vielleicht insgesamt mal aufräumen, wenn das noch erweitert werden soll......


----------



## Guest (15. Sep 2008)

Also :


```
Thread thread = new Thread(new Runnable() {
         @Override
         public void run() {
            while(true) {
               //hole Faxe

               SwingUtilitites.invokeLater(new Runnable()
{
    public void run()
    {
        getContentPane().removeAll();
        initGUI();
    }
});

               try {
                  Thread.sleep(30 * 1000); //30s
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
            }
         }
      });
      thread.start();
```

oder wie?

und Wo kommt dass dann in den Gesamt Code?


----------



## KingArtus (15. Sep 2008)

Nicht als wenn dass nun schon Gelöst wäre mit dem Reload, *g* bei mir Klappt dass nicht ich weiß aber Auch nicht ob dass da oben richtig ist und ich es an die Richtige Stelle geschoben habe...

aber wenn, meint ihr es ist schwer dann noch eine Massage aus zu geben wenn sich die Zahl erhöht hat? ist wahrscheinlich nur was für Pros, oder so..

ich dacht ean ein kleines aufpoppendes Fenster in Vordergrund "2 Neue Faxe" oder so...

aber das wäre zu viel das Guten ...

wichtig wäre mir erstmal das Mit dem Reload


----------



## Marco13 (15. Sep 2008)

Marco13 hat gesagt.:
			
		

> Im Prinzip kannst du das - wie es ist - einesetzen in den Konstruktor (also in "public NewJFrame()") ....


----------



## Guest (15. Sep 2008)

So habe ich es außprobiert:


```
public NewJFrame()
  {
      super();
      initGUI();
      
      Thread thread = new Thread(new Runnable() {
          @Override
          public void run() {
             while(true) {
                //hole Faxe

                SwingUtilitites.invokeLater(new Runnable()
 {
     public void run()
     {
         getContentPane().removeAll();
         initGUI();
     }
 });

                try {
                   Thread.sleep(30 * 1000); //30s
                } catch (InterruptedException e) {
                   e.printStackTrace();
                }
             }
          }
       });
       thread.start();
      
      
      
  }
```

geht nicht


----------



## Marco13 (16. Sep 2008)

```
//For [url]http://www.java-forum.org/de/posting.php?mode=reply&t=74910[/url]

import javax.swing.JButton;

import javax.swing.*;
import javax.swing.SwingUtilities;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.io.FileFilter;
import java.io.IOException;

class NewJFrame extends javax.swing.JFrame
{
    {
        // Set Look & Feel
        try
        {
            javax.swing.UIManager
                    .setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    /**
     * Auto-generated main method to display this JFrame
     */
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                NewJFrame inst = new NewJFrame();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }

    public NewJFrame()
    {
        super();
        initGUI();
        Thread thread = new Thread(new Runnable()
        {
            public void run()
            {
                while (true)
                {
                    // hole Faxe

                    SwingUtilities.invokeLater(new Runnable()
                    {
                        public void run()
                        {
                            getContentPane().removeAll();
                            initGUI();
                        }
                    });

                    try
                    {
                        Thread.sleep(3 * 1000); // 30s
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        });
        thread.start();
    }

    private void initGUI()
    {
        getContentPane().setLayout(new GridLayout(0, 1));
        try
        {
            String dateiname = "Paths.txt";
            File file = new File(dateiname);
            if (file.exists())
            {
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        new FileInputStream(file)));
                while (true)
                {
                    String verzeichnisName = br.readLine();
                    if (verzeichnisName == null)
                    {
                        break;
                    }
                    String info = br.readLine();

                    createButton(verzeichnisName, info);
                }
                br.close();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        createAddButton();
        pack();
    }

    private void createAddButton()
    {
        JButton addButton = new JButton("New...");
        addButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                // FileChooser und Dialog verwenden, um Verzeichnis und
                // InfoString zu
                // holen (siehe
                // [url]http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html#input[/url]
                // und
                // [url]http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html[/url])
                String directory = "C:/windows";
                String info = "Some info";
                try
                {
                    BufferedWriter bw = new BufferedWriter(
                            new OutputStreamWriter(new FileOutputStream(
                                    "Paths.txt", true)));
                    bw.write(directory + "\n");
                    bw.write(info + "\n");
                    bw.close();
                }
                catch (Exception ex)
                {
                    ex.printStackTrace();
                }
                getContentPane().removeAll();
                initGUI();
            }
        });
        getContentPane().add(addButton);

    }

    private void createButton(String verzeichnisName, String info)
    {
        System.out.println("Erstelle Button for " + verzeichnisName
                + " mit info " + info);
        try
        {
            final File verzeichnis = new File(verzeichnisName);
            if (!verzeichnis.exists())
            {
                System.err.println("Verzeichnis " + verzeichnisName
                        + " existiert nicht");
            }
            else
            {
                int iAnzahlPDF = verzeichnis.listFiles(new FileFilter()
                {
                    public boolean accept(File pathname)
                    {
                        return pathname.getName().matches(".+\\.(?i)pdf");
                    }
                }).length;

                JButton jButton1 = new JButton();
                jButton1.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        try
                        {
                            Desktop.getDesktop().open(verzeichnis);
                        }
                        catch (IOException e1)
                        {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }

                    }

                });
                getContentPane().add(jButton1);
                jButton1.setText(String.valueOf(iAnzahlPDF + " " + info));
            }
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}
```
:roll:


----------



## KingArtus (16. Sep 2008)

> Im Prinzip kannst du das - wie es ist - einesetzen in den Konstruktor (also in "public NewJFrame()") und dann die Zeile



Sorry aber irgendwie weiß ich nicht so wirklich was ich damit machen soll:-(

ist mir ja Peinlich aber das Geht an mir vorbei.

habe experimentiert aber klappt nicht


----------



## Marco13 (16. Sep 2008)

Siehe den geposteten, fix-und-fertigen, compilierbaren code, der zwar murksig und unaufgeräumt ist, aber alle 3 Sekunden alles updatet....


----------



## KingArtus (16. Sep 2008)

Muss ich dafür irgendeine Besondere Java Version installiert haben? bei mir zuhause geht es aber auf einem Windows 2003 Server geht es nicht habe dann die Erscheinung, dass das Fenster kommt, Ich klicke auf NEW, es passiert NICHTS.. ich bearbeite die TXT und starte das Programm neu. und Garnichts passiert, es startet nicht, ich kann die TXT nicht bearbeiten nicht Löschen nichts


----------



## Marco13 (16. Sep 2008)

Beim Klick auf "new" wird im Moment noch ein festgelegter Pfad in die Paths.txt eingetragen. Das hatte ich schon gesagt, und die passenden Links im Quellcode gepostet, und darauf verwiesen. Wenn du das nicht hinkriegst, ist das eine Sache, aber wenn du die Antworten nichtmal liest, .... tja ... bei so wenig Eigeninitiative schwindet meine Motivation, dir damit noch weiter zu helfen. Viel Erfolg noch.


----------



## KingArtus (16. Sep 2008)

Naja gelesen habe ich schon alles und dass mehr als einmal...

Ich war halt nur Verwundert dass es auf dem Einem System XP klappt und auf dem anderen 2003 nicht.

ich habe auch verstanden wie es pie mal Daumen Funktioniert und wo die Strings stehen, die in das Dokument Geschieben werden...
aber wenn die das Dokument test weise Händisch anlege hatte ich gedacht dass es gehen müsste

Jörg


----------



## KingArtus (16. Sep 2008)

Ich Danke dir für all deine Bemühungen... 
hast mir wirklich weitergeholfen...

Jörg


----------



## Marco13 (16. Sep 2008)

Ja, schön, aber...


			
				KingArtus hat gesagt.:
			
		

> ...und starte das Programm neu. und Garnichts passiert, es startet nicht,


bemüh dich bei sowas wenigstens, klare Aussagen zu machen....


----------

