JButton [] mit Werten hinterlegen

F

Franky1140

Mitglied
Hallo Jungs ,

ich werde mal mein Problem versuchen richtig zu erklären. Wir sollen einen Kalender erstellen (JavaSwing usw.) ist auch alles sowiet gut und grafisch erstellt. ( siehe Bild)https://drive.google.com/file/d/0B3_nqE_ISiuUaDZuaERSQk9pSkk/view?usp=sharing
Die Buttons werden mit einer Schleife erstellt, denke aber dass das ein fehler ist.


for (int i = 0; i < tabJbutton.length; i++) {

tabJbutton = new JButton(String.valueOf(i)); // name der Buttons
// System.out.println ("**** " +tabJbutton[5]);
tabJbutton.addActionListener(this);
paneast.add(tabJbutton);


Jetzt möchte ich gerne den Buttons, Strings hinterlegen und die dann vergleichen mit dem AktuellenDatum.

Meine Idee ist das ich eine String Array [] = {xxx,xxx,xxx} den einzelnen Buttons hinterlege, nur leider fehlt mir die Idee dafür, wie man ein String [] einen JButton[] anhängen kann bzw ob das überhaupt möglich ist.

LG axo bin net so der Crack auf dem Gebiet :(
 
S

strußi

Top Contributor
wie waere es wenn du dann sagt tabJButton[ i] =new JButton(...);
Zugriff auf den Inhalt von Arrays ueber ihren Index

dann tabJButton[ i].add was auch immer. fuer jedes neue add ein neus tabJButton[ i].add
 
F

Franky1140

Mitglied
Dazu muss ich doch aber bei dem Vergleich immer den Index angeben oder ?
Bsp.: f[2].equals.Datum[Variable]

das möchte ich eigentlich nicht, dann müsste ich doch 24 extra Abfragen erstellen oder Missverstehe ich das jetzt ?
 
S

strußi

Top Contributor
du kannst auch eine Action machen und wenn diese Ausgelöst wird eine bestimmten wert zurückgeben, den du bei der erstellung der Action mitgibst. Nur eine Action schreiben und diese so oft du willst wiederverwenden. Dazu kannst du einfach die Parameter des Action-Konstruktors anpassen, und die passenden Werte beim Aufruf mitgeben.

hab mal eine Action von einem LottoSpiel, die du anpassen kannst.
Java:
import java.awt.event.ActionEvent;
import javax.swing.*;

public class ButtonAction extends AbstractAction{
    Tipp tipp =Tipp.getInstance();
    TippUI tippUI;
  
    String b;
    public ButtonAction( String name, TippUI t){
        super( name); //Beschriftung des Buttons
        b =name;
        tippUI =t;
        if( !tipp.spielfelder.contains( t)){
            tipp.tipps.add( new int[ 6]);
            tipp.counter.add( 0);
        }
    }

  
    @Override
    public void actionPerformed(ActionEvent e){
//Logig
        if( tipp.max <6){
            JToggleButton tb =(JToggleButton)e.getSource();
            tb.setEnabled( false);
            tipp.tipp[ tipp.max] =Integer.parseInt( b);
            tipp.max++;
        } else{
            JToggleButton tb =(JToggleButton)e.getSource();
            tb.setSelected( false);
        }
        System.out.println( tipp.max);
    }

}
und die Verwendung
Java:
JToggleButton tb =new JToggleButton( new ButtonAction(Integer.toString( counter), this));
 
T

Times

Bekanntes Mitglied
Habe das Bild nicht so genau angeschaut, mein Fehler.. daher hier eine Lösung für einen richtigen Kalender (nicht Adventskalender):
Du könntest dir auch deinen eigenen Button nur für den Kalender erstellen,
sprich du überschreibst den JButton und gibst deiner neuen Button-Klasse soviele zusätzliche Attribute wie du für deinen Kalender brauchst.
So könntest du zB. auch der Klasse 3 Attribute geben: Tag, Monat, Jahr.
Der Tag könnte fest im Konstruktor stehen und Monat und Jahr werden dynamisch vom Kalender an die Buttons übergeben. Nachdem du diese übergeben hast könntest du dann noch schauen ob dieser Tag in jenem Jahr/Monat überhaupt existiert und wenn nicht sich selber auf unsichtbar setzen oder deaktivieren.

Grüße Times
 
Zuletzt bearbeitet:
F

Franky1140

Mitglied
Hallo , Viele Dank für eure Antworten bin Leider immer noch nicht weiter und langsam ist der Frust enorm :(
Das der Button eine eigene Klasse bekommt hatte ich auch schon als Idee, nur hängt dieses auch an dem Wissen es umzusetzen.
Eine eigene Klasse ok aber wie bekomme ich mit einem Button durch eine Schleife 24 hin?
Lg
 
truesoul

truesoul

Top Contributor
Hallo Franky1140,

du kannst auch ein Array mit Buttons erstellen.

Java:
public class MyDateButton extends JButton {
   private Calendar value;

   public MyDateButton(Calendar value) {
     setValue(value);
   }

   public Calendar getValue() {
     return value;
   }

   public void setValue(Calendar value) {
     this.value = value;
     SimpleDateFormat dateFormat = new SimpleDateFormat("MMMM", Locale.GERMAN);
     setText(dateFormat.format(getValue().getTime()));

   }
}

}

Java:
public class Test extends JFrame implements ActionListener {

    private final int MONTHS = 12;

    public Test() {
        init();
    }

    private void init() {
        JPanel panel = new JPanel();

        for (int i = 0; i < MONTHS; i++) {
            Calendar calender = Calendar.getInstance();
            calender.set(Calendar.MONTH, i);
            MyDateButton dateButton = new MyDateButton(calender);
            dateButton.addActionListener(this);
            panel.add(dateButton);
        }

        add(panel);
        pack();

        setTitle("Beispiel");
        setSize(300, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        MyDateButton button = (MyDateButton) e.getSource();
        Calendar date = button.getValue();
        // Vergleiche Datum
    }

}

So könnte es aussehen. Ob du dein Button oder das Datum in ein Array packst ist dir überlassen.
Mein Beispiel ist jetzt kein Kalender, aber die Buttons werden dem JPanel hinzugefügt und auf Buttonclicks wird reagiert.

Grüße
 
S

strußi

Top Contributor
du kannst die Buttons einfach in ein Array Packen, hier mal mein Beispiel für ein Lotto Tippschein

Ich habe hier aber keine saubere Trennung von Funktion und Logik gemacht. in UI Code findest du die Erstellung der Buttons und zuweisung in ein Array

Java:
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JPanel;
import javax.swing.JToggleButton;

/**
*
* @author Christian
*/
public class TippUI extends JPanel{
 
    JToggleButton[][] spielfeld =new JToggleButton[ 7][ 7];
    JPanel panel =new JPanel( new GridBagLayout());
    GridBagConstraints gbc =new GridBagConstraints();
 
 
    TippUI(){
        gbc.insets =new Insets( 3, 3, 3, 3);
        int counter =1;
        for( int row=0; row <spielfeld.length; row++){
            for( int col=0; col <spielfeld.length; col++){
                JToggleButton tb =new JToggleButton( new ButtonAction(Integer.toString( counter), this));
                tb.setPreferredSize( new Dimension( 48, 25));
                spielfeld[ row][ col]= tb;
                counter++;
                addComponent( col, row, 1, 1, 0, 0, GridBagConstraints.CENTER, gbc, panel, tb);
            }
        }
        add( panel);
    }
 
 
    /**
     * Interne Methode zum hinzufügen der einzeln Componenten auf das Panel
     *
     * @param gridx Colum
     * @param gridy Row
     * @param width count of Colums
     * @param height count of Rows
     * @param weightx percent of the colum for the Component
     * @param weighty percent of the row for the Component
     * @param fill fill orientation
     * @param gbc GridBagConstraints
     * @param pnl
     * @param c Component to add
     */
    private void addComponent( int gridx, int gridy, int width, int height, double weightx, double weighty, int fill,
                               GridBagConstraints gbc, JPanel pnl, Component c){
        gbc.gridx      =gridx;    gbc.gridy     =gridy;
        gbc.weightx    =weightx;  gbc.weighty   =weighty;
        gbc.gridheight =height;   gbc.gridwidth =width;
        gbc.fill =fill;
        pnl.add( c, gbc);
    }
 
}
Java:
import java.awt.event.ActionEvent;
import javax.swing.*;

public class ButtonAction extends AbstractAction{
    Tipp tipp =Tipp.getInstance();
    TippUI tippUI;
 
    String b;
    public ButtonAction( String name, TippUI t){
        super( name); //Beschriftung des Buttons
        b =name;
        tippUI =t;
        if( !tipp.spielfelder.contains( t)){
            tipp.tipps.add( new int[ 6]);
            tipp.counter.add( 0);
        }
    }

 
    @Override
    public void actionPerformed(ActionEvent e){
        if( tipp.max <6){
            JToggleButton tb =(JToggleButton)e.getSource();
            tb.setEnabled( false);
            tipp.tipp[ tipp.max] =Integer.parseInt( b);
            tipp.max++;
        } else{
            JToggleButton tb =(JToggleButton)e.getSource();
            tb.setSelected( false);
        }
        System.out.println( tipp.max);
    }

}
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
*
* @author Christian
*/
public class Spielfeld{
    JFrame frame =new JFrame( "Tippschein");
    JPanel mainPanel =new JPanel();
    JPanel spielfeldPanel =new JPanel();
    JPanel buttonPanel =new JPanel();
    JPanel resultPanel =new JPanel();
 
    int[] ziehung =new int[ 6];
    ArrayList<Integer> zahlen =new ArrayList<>();
 
 
    Spielfeld(){
        JButton ziehen =new JButton( "ziehen");
        ziehen.addActionListener(new ActionListener(){ //ActionListener hinzufügen, ist der Button gedrück oder nicht?
            int numbers =49;
            @Override
            public void actionPerformed( ActionEvent e){//was tun wenn der Button gedrückt wurde
                for( int i =0; i <numbers; i++){
                    zahlen.add( i+1);
                }
                Random z =new Random();
             
                for( int i =0; i <ziehung.length; i++){
                    int zi =z.nextInt( numbers);
                    ziehung[ i] =zahlen.get( zi);
                    zahlen.remove( zi);
                    numbers--;
                    System.out.println( zi);
                }
                frame.revalidate();
            }
        });
        buttonPanel.add( ziehen);
     
     
        spielfeldPanel.add( new TippUI());
     
        JLabel result =new JLabel( "");
        for( int results :ziehung){
            String s =result.getText();
            s =s.concat( " "+ Integer.toString( results));
            result.setText( s);
         
        }
        resultPanel.add( result);
     
        mainPanel.add( spielfeldPanel);
        mainPanel.add( buttonPanel);
        mainPanel.add( resultPanel);
        frame.add( mainPanel);
        frame.setVisible( true);
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
        frame.pack();
    }
 
    public static void main( String[] args){
        new Spielfeld();
    }
 
}
Java:
import java.util.ArrayList;

/**
*
* @author Christian
*/
public class Tipp{
 
    ArrayList<int[]> tipps =new ArrayList<>();
    ArrayList<TippUI> spielfelder =new ArrayList<>();
    ArrayList<Integer> counter =new ArrayList<>();
 
    int[] tipp =new int[ 6];
    int max =0;
 
    private Tipp(){}
 
    public static Tipp getInstance(){
        return TippHolder.INSTANCE;
    }
 
    private static class TippHolder{
        private static final Tipp INSTANCE=new Tipp();
    }
}
 
F

Franky1140

Mitglied
Sauber , ich habe das jetzt auch geschafft mit euerer Hilfe, vielen Dank .
Ich habe es dann doch ohne das Array gemacht sondern mit einem Button der im ActiveListener gecastet wird.
VIELEN DANK für die Zahl-reichen Beispiele
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
E JButton und JTextField Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
P JButton -Arrays Java Basics - Anfänger-Themen 4
A JButton in anderer Klasse bearbeiten. Java Basics - Anfänger-Themen 2
L Erste Schritte JButton reagiert nicht Java Basics - Anfänger-Themen 5
S Bild über JButton legen Java Basics - Anfänger-Themen 3
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
F Interface JButton von anderer Klasse hinzufügen Java Basics - Anfänger-Themen 2
J JButton macht was er will Java Basics - Anfänger-Themen 3
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
N JButton anpassen Java Basics - Anfänger-Themen 3
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
D JButton in JDialog mit Action belgen Java Basics - Anfänger-Themen 6
V JButton einer anderen Klasse übergeben? Java Basics - Anfänger-Themen 6
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A weiter JButton Fehler Java Basics - Anfänger-Themen 3
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
N Erste Schritte JButton reagiert nur einmal. Java Basics - Anfänger-Themen 12
S JButton Java Basics - Anfänger-Themen 2
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
K JButton alles zurücksetzen Java Basics - Anfänger-Themen 1
U JButton: Beschriftung ueber Variable zuweisen Java Basics - Anfänger-Themen 6
S JButton erscheint erst bei Mouseover Java Basics - Anfänger-Themen 10
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S JDK installieren JButton BorderPoints?! Java Basics - Anfänger-Themen 7
E Problem mit erben von JButton Java Basics - Anfänger-Themen 7
J Bei Hinzufügen von JButton Programm langsam Java Basics - Anfänger-Themen 3
J Verknüpfung von JButton to JTextField Java Basics - Anfänger-Themen 4
S Jbutton per Passworteingabe aktivieren Java Basics - Anfänger-Themen 2
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
M Hintergrundbild für JButton Java Basics - Anfänger-Themen 6
A jbutton - icon linksbündig, text zentriert Java Basics - Anfänger-Themen 10
M Input/Output JFrame mit JButton und JTextfield Java Basics - Anfänger-Themen 114
J Hilfe bei JButton Java Basics - Anfänger-Themen 6
A JButton[] und String[] in doppelter For-Schleife Java Basics - Anfänger-Themen 4
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
pg1337 JButton zuschneiden Java Basics - Anfänger-Themen 3
T Modales JDialog schliessen mit JButton Java Basics - Anfänger-Themen 2
D JButton Array setBackground Java Basics - Anfänger-Themen 2
F JButton wie selektierter JTabbebPane-Header Java Basics - Anfänger-Themen 7
G jButton bei Klick String +1 Java Basics - Anfänger-Themen 5
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3
S JButton wird nicht angezeigt Java Basics - Anfänger-Themen 14
C JButton.getIcon() != null Java Basics - Anfänger-Themen 3
E JButton-Text wird in Schleife nicht geändert Java Basics - Anfänger-Themen 4
F welches Layout für JButton-Liste verwenden Java Basics - Anfänger-Themen 6
T JButton Text ändern Java Basics - Anfänger-Themen 4
L JButton erscheint nur mit pack() Java Basics - Anfänger-Themen 3
U Passwort auf JButton setzen. Java Basics - Anfänger-Themen 2
E JButton Hintergrund / Rahmen entfernen? Java Basics - Anfänger-Themen 4
L Bild auf einem JButton Java Basics - Anfänger-Themen 4
K JButton.setText Problem Java Basics - Anfänger-Themen 6
M JButton und DisabledIcon Java Basics - Anfänger-Themen 2
K jButton zur Laufzeit hinzufügen Java Basics - Anfänger-Themen 22
A GUI - JButton problem! Java Basics - Anfänger-Themen 5
M JButton selbst nachprogrammieren Java Basics - Anfänger-Themen 3
A JButton Textrahmen Java Basics - Anfänger-Themen 7
A Platzierung eines JButton Java Basics - Anfänger-Themen 4
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
E JButton klassenübergreifend nutzen? Java Basics - Anfänger-Themen 6
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
P JButton identifizieren Java Basics - Anfänger-Themen 8
K Funktion zu einem JButton hinzufügen Java Basics - Anfänger-Themen 27
D HTML Text von jButton disablen Java Basics - Anfänger-Themen 2
E Auf JButton in Arraylist zugreifen Java Basics - Anfänger-Themen 6
E Andere Form eines JButton Java Basics - Anfänger-Themen 17
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
A JButton erscheint nicht (BlueJ) Java Basics - Anfänger-Themen 2
M JButton sieht komisch aus :-) Java Basics - Anfänger-Themen 5
B JPanel über JButton umändern Java Basics - Anfänger-Themen 9
D JButton transparent bekommen? Java Basics - Anfänger-Themen 5
H JButton Unsichtbar Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
J Variable die bei JButton Clicks mitzählt Java Basics - Anfänger-Themen 9
Developer_X JButton removt sich selbst Java Basics - Anfänger-Themen 32
K JButton blaue Umrandung deaktivieren Java Basics - Anfänger-Themen 9
S Nullpointererror bei JButton-Feld Java Basics - Anfänger-Themen 2
I JButton zum frame schließen Java Basics - Anfänger-Themen 6
G Html-Seite mit JButton öffnen Java Basics - Anfänger-Themen 3
A JButton erscheint erst bei mouse over Java Basics - Anfänger-Themen 3
P Größe eines JButton? Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Anzeige

Neue Themen


Oben