JButton in einem Array aktualisieren

Ardam

Mitglied
Hallo liebe Community,

für ein Projekt baue ich mir gerade eine GUI auf. Genauer gesagt habe ich ein JFrame, in dem sich zwei Panels befinden, in denen sich wiederum jeweils Buttons befinden.
Ich habe die insgesamt 110 Buttons in einem Panel mithilfe des GridLayouts zu einer schönen Tabelle angeordnet. Nun möchte ich aber bei einem einzelnen Button das Bildchen verändern, und zwar mit setIcon.

Meine bisherigen Versuche (ich bin Anfänger) sind fehlgeschalgen. Ich habe schlicht versucht, den Button zu verändern und ihn dann erneut mit panel.add() zu aktualisieren. Auf den ersten Blick war das zwar erfolgreich, minimiert man jedoch den Frame und ruft ihn erneut auf, erscheint der Button zusaätzlich am unteren Rand. Hier zur Verdeutlichung der QT:
Die betroffene Methode ist changeIcon();

Java:
public User_Interface () 
	{
		frame.setBounds(0, 0, 1020, 480);
		frame.setLayout(new FlowLayout(FlowLayout.CENTER, 40, 0));
		mypanel = User_Interface.setPanel(mypanel, Barray, false);
		mypanel.setPreferredSize(dim);
		cpupanel = User_Interface.setPanel(cpupanel, Barray, true);	
		cpupanel.setPreferredSize(dim);
		frame.add(mypanel);
		frame.add(cpupanel);
		frame.setVisible(true);
	}
	public static JPanel setPanel (JPanel panel, JButton[][] Barray, boolean cpu)
	{
		if (cpu==false)
			panel.setBounds(0, 0, 440, 440);
		else
			panel.setBounds(580, 0, 440, 440);
		
		Barray = User_Interface.initButtons(Barray,false);
		Barray = User_Interface.initButtons(Barray, true);
		for (int i=0; i<=9; i++)
		{
			for (int j=0; j<=9; j++)
				panel.add(Barray[i][j]);
		}
		panel.setLayout(new GridLayout(11,10,0,0));
		return panel;
	}
	public static JButton[][] initButtons (JButton[][] Barray, boolean cpu)
	{
		for (int i=0; i<=9; i++)
		{
			for (int j=0; j<=9; j++)
			{
				Barray[i][j]= new JButton (User_Interface.loadImage("water"));
				if (cpu==false)
					Barray[i][j].setBounds(40+40*i,40+40*j,40,40);
				else
					Barray[i][j].setBounds(580+40*i, 580+40*j,40,40);
			}
		}
		return Barray;
	}
	public void changeIcon (boolean cpu, String name, int x, int y)
	{
		Barray[x][y].setIcon(User_Interface.loadImage(name));
		mypanel.add(Barray[x][y]);
	}
}

Vielen Dank im Voraus,
Ardam
 

m0nk3y

Mitglied
Versuch mal sowas:

Java:
public void changeIcon (boolean cpu, String name, int x, int y)
    {
        Barray[x][y].setIcon(User_Interface.loadImage(name));    // Das Icon des Buttons aktualisieren

        // mypanel.revalidate();
        mypanel.repaint();           // Das Panel neuzeichnen
    }

Sollte das nicht funktionieren kannst du mal noch die revalidate()-Methode dazu benutzen. Aber da sich nur der Inhalt einer Komponente und nicht deren Größe geändert hat, sollte repaint() reichen?! (bin mir nicht ganz sicher).
 

Ardam

Mitglied
Hallo m0nk3y,
danke, tatsächlich ändert sich jetzt nach Minimieren und neu aufrufen nicht mehr. Dafür VIELEN DANK!
Zwar wird noch das falsche Panel verändert, aber da werde ich wohl irgendwo die Variablen vertauscht haben ;)

Liebe Grüße, Ardam.
 

bERt0r

Top Contributor
Java:
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.GroupLayout.SequentialGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;


public class ButtonArray extends JFrame
{
	
	private JPanel contentPane;
	private ImageIcon icon;
	
	class ChangeIconActionListener implements ActionListener
	{

		@Override
		public void actionPerformed(ActionEvent e)
		{
			JButton button=(JButton)e.getSource();
			button.setIcon(icon);
		}
		
	}
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
			{
				public void run()
				{
					try
					{
						ButtonArray frame = new ButtonArray();
						frame.setVisible(true);
					} catch (Exception e)
					{
						e.printStackTrace();
					}
				}
			});
	}
	
	/**
	 * Create the frame.
	 */
	public ButtonArray()
	{
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		GroupLayout layout=new GroupLayout(contentPane);
		contentPane.setLayout(layout);
		setContentPane(contentPane);
		
		try
		{
			Image image=ImageIO.read(new URL("http://www.java-forum.org/images/buttons/post_thanks.gif"));
			icon=new ImageIcon(image.getScaledInstance(30,20,Image.SCALE_DEFAULT));
		} catch (MalformedURLException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
			
		ParallelGroup hGroup=layout.createParallelGroup();
		SequentialGroup vGroup=layout.createSequentialGroup();
		ActionListener listener=new ChangeIconActionListener();
		
		for(int i=0;i<20;i++)
		{
			ParallelGroup vertRow=layout.createParallelGroup();
			SequentialGroup horizRow=layout.createSequentialGroup();
			
			for(int j=0;j<5;j++)
			{
				JButton button=new JButton(String.valueOf(5*i+j));
				button.addActionListener(listener);
				
				horizRow.addComponent(button,100,100,100);
				vertRow.addComponent(button,25,25,25);
			}
			vGroup.addGroup(vertRow);
			hGroup.addGroup(horizRow);
		}
		layout.setVerticalGroup(vGroup);
		layout.setHorizontalGroup(hGroup);
		pack();	
	}
}
 

Ardam

Mitglied
Tut mir Leid wegen des Doppelpostes, aber ich habe ein weiteres Problem bei der gleichen Klasse.
Wie bereits oben angesprochen, wird das falsche Feld verändert. Egal, was ich schreibe (ob mypanel.repaint() oder cpupanel.repaint() ), es wird immer nur das cpupanel aktualisiert. Habt ihr diesbezüglich Ideen?
Code ist ja oben ;)

Wieder Danke im Voraus, Ardam
 

Ardam

Mitglied
Nein, validate() brachte nicht den erwünschten Erfolg...

Vielleicht gibt es Probleme, weil ich für beide Panels das selbe Button-Array "Barray" verwende?
 

bERt0r

Top Contributor
Brauchst du auch alles nicht. Checkliste:
  • Buttons werden nur einmal beim erstellen des Panels geaddet
  • Icon ist nicht null
  • Dem Panel das gewünschte Layout geben BEVOR du Komponenten addest
Edit: und ja, ein Button kann immer nur auf einem Panel liegen. Wenn du ihn zu einem anderen Panel addest gibts Probleme.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
M Datenbank in Jtable mit einem JButton anzeigen lassen AWT, Swing, JavaFX & SWT 4
N Applet JButton soll html Datei aus einem Ordner öffnen AWT, Swing, JavaFX & SWT 2
D Farbe bei einem JButton wechseln AWT, Swing, JavaFX & SWT 4
D Wie vergrößere ich die schrift auf einem Jbutton AWT, Swing, JavaFX & SWT 2
K Bildgröße auf einem JButton AWT, Swing, JavaFX & SWT 3
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben