Button eigenschaften bearbeiten

Status
Nicht offen für weitere Antworten.
K

KingArtus

Gast
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:
Code:
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
 
K

KingArtus

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

Marco13

Top Contributor
Ja, nicht "schöne", aber am einfachsten wäre wohl das in einer Datei zu speichern
Code:
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...
 
G

Guest

Gast
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

Top Contributor
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.
 
K

KingArtus

Gast
:) 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

Top Contributor
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)

Code:
//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();
        }
    }

}
 
G

Guest

Gast
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) {
//hole Faxe
//update GUI
try {
Thread.sleep(30 * 1000); //30s
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
Code:
aber wie und wo Füge ich den ein?

Jörg
 

Marco13

Top Contributor
Im Prinzip kannst du das - wie es ist - einesetzen in den Konstruktor (also in "public NewJFrame()") und dann die Zeile
// update GUI
ersetzen durch
Code:
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......
 
G

Guest

Gast
Also :

Code:
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?
 
K

KingArtus

Gast
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
 
G

Guest

Gast
So habe ich es außprobiert:

Code:
  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

Top Contributor
Code:
//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:
 
K

KingArtus

Gast
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

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

KingArtus

Gast
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

Top Contributor
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.
 
K

KingArtus

Gast
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
 
K

KingArtus

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

Jörg
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Memory - Nicht alle Button lassen sich aktivieren? Spiele- und Multimedia-Programmierung 1
dummycoders Android Studio - Button ändert Farbe erst nach Delay? Spiele- und Multimedia-Programmierung 5
H Make a cooldown on a button? Spiele- und Multimedia-Programmierung 1
H Change color on button event Spiele- und Multimedia-Programmierung 2
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
X LWJGL - Anklick baren Button erstellen aber wie? Spiele- und Multimedia-Programmierung 6
S Button soll verschiedene panel zufällig durchschalten Spiele- und Multimedia-Programmierung 14
M Mathetrainer - Reset Button funktioniert nicht! Spiele- und Multimedia-Programmierung 8
A Button ausblenden Spiele- und Multimedia-Programmierung 3
P JOGL Button-klick-Problem Spiele- und Multimedia-Programmierung 2
B Problem : Button-Klick bewirkt nichts Spiele- und Multimedia-Programmierung 4
B Animation durch Button auslösen Spiele- und Multimedia-Programmierung 2
K Würfel vergrößern und verkleinern per Button Spiele- und Multimedia-Programmierung 7
G Warten auf Button-Aktion in Schleife? Spiele- und Multimedia-Programmierung 7
D Unterscheidung von Sprites mit verschiedenen Eigenschaften Spiele- und Multimedia-Programmierung 4
P svg bearbeiten Spiele- und Multimedia-Programmierung 0
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
S MP3 Datei informationen bearbeiten Spiele- und Multimedia-Programmierung 9
R TransformGroup finden und bearbeiten Spiele- und Multimedia-Programmierung 8
S BMP-Bild Pixel für Pixel bearbeiten Spiele- und Multimedia-Programmierung 1
C jpg.Bilder teilen/bearbeiten für Puzzle Spiele- und Multimedia-Programmierung 7
H Transformgroup zur Laufzeit bearbeiten Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen


Oben