Button-Array überschreiben und dem Container zufügen?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hoffe mal das ist hier richtig..

Folgendes: Habe ein Button-Array auf das von einigen Stellen und Klassen aus zugegriffen wird und will es mit einem neuen, benutzerdefinierten Array ueberschreiben. Die neuen Buttons sollen dann natuerlich auch angezeigt werden, wogegen die alten geloescht werden sollen. Jede Methode, die zuvor das erste Array aufgerufen hat, soll nun das zweite Aufrufen.


Etwas detaillierter als Beispiel:

Das zurzeit existierende Button-Array[3][3] enthaelt 9 Buttons, die quadratisch im Container angeordnet sind, also auch angezeigt werden. Nun soll der Benutzer die Wahl haben die Anzahl der Buttons innerhalb dieses Quadrats beliebig zu verkleinern oder zu vergroeßern. Es soll nur die Seitenlaenge (in Buttons) waehlbar sein.
Wenn also der Benutzer eine Seitenlaenge von 5 eingibt, dann soll das vorhandene Array[3][3] mit einem Array[5][5] überschrieben werden. Alle 25 Buttons des Arrays[5][5] sollen dann im Container im selben Quadrat angeordnet werden.
Das ganze soll auch von z.B. Array[5][5] auf Array[3][3] funktionieren, wobei wichtig ist, dass die Groeße nicht nur "simuliert" ist, also dass das Array[3][3] bei einem Aufruf mit z.B. [4][5] eine OutOfBoundsException liefert.
Zusaetzlich existieren Methoden, die die Eigenschaften der Buttons je nach geklicktem Button aendern (z.b. das Icon). Das heißt, dass das neue Array den selben Namen haben muss wie das vorherige, sonst wuerden die Aufrufe ja ins Leere gehn. Das vorherige Array soll also ueberschrieben werden.


Mein Problem ist nun hauptsaechlich, dass ich außerhalb der Initialisierung der Komponenten meinem Container mit container.add(Objekt); nichts mehr hinzufuegen kann. Ich kann zwar das Array in einer Methode ueberschreiben, kann aber in der Methode nicht die Buttons zum Container hinzufuegen.

Habe es bisher sogemacht


Code:
private JButton[][] oldarray = new JButton[oldsize][oldsize];

void resize() {
  JButton[][] newarray = new JButton[newsize][newsize];
  oldarray = newarray;
  for( i , j <newsize) {
    oldarray[i][j] = new JButton();
    ...
  }
}

Dann hab ich zwar ein Array mit neuer Groeße und dem selben Namen, kann aber die ganzen Buttons nicht anzeigen.
Gibt es nicht irgendwie eine moeglichkeit innerhalb des Programmablaufs Swing Ojekte zum Container hinzuzufuegen?
Keine Ahnung wie ich das sonst bewerkstelligen sollte..
 

Marco13

Top Contributor
Das use-case ist jetzt nicht 100% klar. Falls irgendjemand (unschönerweise) eine echte Referenz auf das Array hat, wird das sowieso problematisch. Eine Möglichkeit wäre vielleicht eine Klasse der Art
Code:
class ButtonArray
{
    private Container container;
    private JButton array[][] = null;

    public ButtonArray(Container container, int sizeX, int sizeX)
    {
        this.container = container;
        resize(sizeX, sizeY);
    }

    public void resize(int sizeX, int sizeY)
    {
        if (array != null)
        {
            for (int x=0; x<array.length; x++)
            {
                for (int y=0; y<array[x].length; y++)
                {
                    container.remove(array[x][y];
                }
            }
        }
        array = new JButton[sizeX][sizeY];
        for (int x=0; x<array.length; x++)
        {
            array[x] = new JButton[sizeY];
            for (int y=0; y<array[x].length; y++)
            {
                array[x][y] = new JButton();
                container.add(array[x][y];
            }
        }
        container.validate();
    }
}
also die Funktionalität zu "kapseln" und den entsprechenden Container zu speichern, aber das ist nur der erste Gedanke - ob das für deinen Fall passt (oder ob man es vielleicht "aufbohren" sollte, zu etwas was (noch allgemeiner) mit Listenern arbeitet), musst du wissen....
 

Zed

Bekanntes Mitglied
Das Probelem was ich sehe ist wenn du die Buttons aus dem Array das erste mal ins Frame hinzugefügt hast dann wird eine referenz des Objectes im Frame gehalten und durch die wird auch dann das element dargestellt.

Überschreibst du das Array dann existieren die alten Objecte weiter und werden nicht vom GC gelöscht weil es noch im Frame referenzen gibt.

Um das zu realisieren würde ich die Buttons in einem unabhängigen Panel darstellen. Wenn du neu Buttons erstellen möchtet, musst du die alten Buttons aus dem Panel entfernen und die neuen Buttons hinzufügen. Der nächte Schritt wäre ein Repaint des Panels zu erzwingen um den neuen Content sichtbar zu machen.

Um das Panel sicher zu bekommen ist eine Lazy-Initialisierung das beste
Code:
public getButtonPanel(){
if (buttonPanel == null){
buttonPanel = new JPanel();

}
return buttonPanel;

buttonPanel.removeAll() entfernt alle Componenten mit add must du nurnoch die neunen hinzufügen und ein buttonPanel.repaint() ausführen um die Oberfläche zu aktuallisieren

Edit:
Zur laufzeit validate() nicht repaint
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Button Array verschieben klappt nicht. Allgemeine Java-Themen 6
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
M itext - Button der Text in Zwischenablage stellt Allgemeine Java-Themen 0
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M JavaFX Button mit mehreren Aktionen? Allgemeine Java-Themen 7
G Drop down Button Menü (Combobox) Allgemeine Java-Themen 7
E Swing Buttons auf knopfdruck(anderer Button) erstellen Allgemeine Java-Themen 6
K Mit Button neue Klasse öffnen Allgemeine Java-Themen 9
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
Tacofan Button nicht mehr anklickbar machen Allgemeine Java-Themen 8
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9
J Java eigenen Button programmieren (ob Cursor im Rechteck ist oder nicht..../button pressed or not) Allgemeine Java-Themen 6
F Klassen Klasse bei Button klick öffnen Allgemeine Java-Themen 11
J JScrollPane und Button erscheinen nicht Allgemeine Java-Themen 13
L Label- & Textfelderzeugung durch Button Allgemeine Java-Themen 1
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
B Button im Web klicken Allgemeine Java-Themen 4
C Java Excel Button Allgemeine Java-Themen 2
J Swing Eigenes Button-design Allgemeine Java-Themen 2
H WAV abspielen nach Button-Klick Allgemeine Java-Themen 4
G Button-Registrierung beim ActionListener erst NACH Tastendruck Allgemeine Java-Themen 2
M JavaFX-Gegenstück zu Swing-Button-DoClick-Methode Allgemeine Java-Themen 5
A Button drücken Allgemeine Java-Themen 3
S Thread anhalten per Button ? Allgemeine Java-Themen 3
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
M HTTP Selenium button klicken Allgemeine Java-Themen 2
K GUI-Button Inhalte vergleich - TicTacToe Grundriss Allgemeine Java-Themen 11
X Button während Thread aktiv ist disablen Allgemeine Java-Themen 11
C Button geben Fehlermeldung aus Allgemeine Java-Themen 5
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R [Android]Wie dynamischen Button-Feld erstellen? Allgemeine Java-Themen 3
F WebBrowser Button automatisch drücken Allgemeine Java-Themen 5
L mit Button jar.Datei öffnen? Allgemeine Java-Themen 5
1 URL mit Button öffnen Allgemeine Java-Themen 29
L Thread stoppen über Button funktioniert nicht Allgemeine Java-Themen 7
ModellbahnerTT Button mit Zahlen beschriften Allgemeine Java-Themen 1
E JTidy html "hidden" Button drücken Allgemeine Java-Themen 7
G Icon auf Button Allgemeine Java-Themen 5
N Button Allgemeine Java-Themen 3
G Schleife durch Button beenden Allgemeine Java-Themen 6
G wenn Button geklickt -> regelmäßig Aktion ausführen Allgemeine Java-Themen 7
G default button für enter taste Allgemeine Java-Themen 3
T JTabbedPane nach Button-Klick wechseln Allgemeine Java-Themen 3
E Button disablen Allgemeine Java-Themen 8
T Button Action Allgemeine Java-Themen 10
G swt button Allgemeine Java-Themen 6
M Methode soll warten, bis Button gedrückt Allgemeine Java-Themen 2
P Button automatisch drücken Allgemeine Java-Themen 5
M bei Klick auf Button Datei einlesen Allgemeine Java-Themen 3
E Button mit 2zeiliger Beschriftung Allgemeine Java-Themen 3
ElViZ HTML-Button mit Java "drücken" lassen? Allgemeine Java-Themen 3
MQue Button setEnabled() Allgemeine Java-Themen 2
MQue Konzept- Frage zum Button-Aktualisieren Allgemeine Java-Themen 5
MQue Button Attribute setzen Allgemeine Java-Themen 14
MQue Button ansprechen Allgemeine Java-Themen 5
MQue Button erzeugen mit 3 Klassen Allgemeine Java-Themen 3
MQue Button mit Icon und Beschriftung Allgemeine Java-Themen 7
MQue Button Event beim drücken und beim auslassen Allgemeine Java-Themen 7
P JComponenten (Button, JSlider, usw) erweitern Allgemeine Java-Themen 12
E Button: Event auslösen Allgemeine Java-Themen 7
E Mit Button ein Fenster öffnen Allgemeine Java-Themen 4
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
P invoke per button Allgemeine Java-Themen 5
D Button-Sprache und windowClosing Allgemeine Java-Themen 6
G Text und Bild/Icon im Label/Button positionieren/ausrichten Allgemeine Java-Themen 2
A Wie mach ich, das mein Button schneller reagiert. Allgemeine Java-Themen 13
D Bild per Button painten Allgemeine Java-Themen 5
V Button schließen - NullPointerException Allgemeine Java-Themen 6
H Button ist nicht ansprechbar Allgemeine Java-Themen 4
S 100 Fehler bei Button machen :) Allgemeine Java-Themen 9
G Fenster durch eigenen Button minimieren Allgemeine Java-Themen 6
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
M Array Rang eines Elements Allgemeine Java-Themen 4
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
noah1407 Array Allgemeine Java-Themen 3
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
L Array und Index Allgemeine Java-Themen 26
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
Willi.We Array sortieren Allgemeine Java-Themen 5
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
H Matrix ohne Array erstellen Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben