Button Attribute setzen

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,


ich hätte eine Frage zu den JButtons und zwar kann ihc mit den ganzen Methoden (setBackground, setText, setForeground, setActionCommand usw) das aussehen bzw die Funktion der Button beeinflussen. die ganzen Attribute eines Buttons müssen ja irgendwo geschpeichert werden.
Meine Frage wäre jetzt, ob ich einen direkten Zugriff zu den Attributen der Button habe, sodass ich einmal meine Defaulteinstellungen für einen Button setze und dann eben immer das Attribut, welches ich verändern will.

oder gibts da vielleicht schon einen Buttondesigner irgendwo, dem ich eine ArrayList übergebe, und dann je nach den Einträgen der ArrayList mein Button aussieht?

Vielen Dank für Eure Antworten,

lg
Michl
 

Leroy42

Top Contributor
Die zugehörigen Attribute sind aber privat.

Vorschlag: Mach dir eine eigene Klasse.

Code:
class MyButton extends JButton {
  public MyButton(String name) {
    this(name);
    setFont(getFont().deriveFont(10.0f));
    // ...
  }
}
 

function

Bekanntes Mitglied
du könntest ja theoretisch eine eigene Methode schreiben die eine ArrayList als parameter übergeben bekommt und dann den Button dem entsprechend designed...

ist eigentlich kein großer aufwand
 

MQue

Top Contributor
Leroy, wie meinst du, die zugehörigen Attribute sind privat? kann ich auf die zugreifen (über getter- Methoden oder sonst irgendwie) (was ist eigentlich deriveFont)
gibts da nicht auch schon was fertiges, das wird ja, könnte ich mir vorstellen, öfter benötigt, für Visualisierungen und so weiter,


eine 2. Frage hätte ich auch noch.
und zwar sieht meine Konfigurationsdatei für die Buttons oben so aus (wei unten), kann ich das irgendwie mit properties.load oder sonst irgendwie definiert einlesen, sodass ich immer alle Einträge zwischen buttonX.state[x] und
buttonX.state[x].ende einlesen kann und im Programm in eine ArrayList speichere und diese Arraylist dann dem Konstruktor "MyButton" übergebe, und dieser mir die Attribute des Buttons setzt. wenn im Programm ein neuer State auftritt, dann hole ich mir eben z.B. state[1] und setzt den Button so, wies zwischen buttonX.state[1] und buttonX.state[1].ende drinnensteht.

Ist das ein ordentliches Konzept oder kann man das eleganter (mit weniger aufwand, weniger Zeilen Code) lösen.

Vielen Dank für Eure Vorschläge (sind immer sehr hilfreich)

lg
Michl



Code:
button1.Begin
   button1.state[0] 
      beschriftung = Ein
      font = Arial
      schriftGroesse = 12
      hintergrundFarbe = gruen
   button1.state[0].ende
   button1.state[1]
      beschriftung = Aus
      hintergrundFarbe = rot
   button1.state[1].ende
   button1.state[2]
   .....
   button1.state[2].ende
buttton1.End
 

para_

Bekanntes Mitglied
Ist das ein ordentliches Konzept oder kann man das eleganter (mit weniger aufwand, weniger Zeilen Code) lösen.

ich würd die states für die buttons in ner xml datei speichern, da kannst es auch sehr bequem auslesen
 

MQue

Top Contributor
das ist aber zu aufwendig, oder. mit den properties kann ich das ja machen mit der XML- Datei (hab ich gelesen) aber kann ich die XML- Datei auch so wie oben beschrieben, auslesen, und wie würde das gehen und... kann ich die XML-Datei auch so erzeugen, ich möchte nämlich, wenn ich mit dem fertig bin, einen Designer programmieren?
ich hab noch nie etwas mit XML gemacht, bin also um jeden Tip in diese Richtung dankbar.


Vielen DANK

lg
 

Leroy42

Top Contributor
Michael1234 hat gesagt.:
was ist eigentlich deriveFont

deriveFont leitet einen Font von einem gegeben ab.

Ich benutze das um z.B. einfach nur die Schriftgröße
zu ändern ohne die anderen Einstellungen (Font-Familie, ...)
ändern/angeben zu müssen.
 

MQue

Top Contributor
ah super, danke. und kann ich irgendwie auf alle Attribute zugreifen, bzw. gibts da wasoder muss ich mir das selber programmieren?
lg
 

Leroy42

Top Contributor
Welche Attribute meinst du denn?

Es gibt entsprechende setter-Methoden:
Code:
setFont, setBorder, setColor, ...
 

MQue

Top Contributor
ja, ich weiß, aber ich möchte das gleich in einer Wurscht übergeben, in einer ArrayList z.B., eben von einer Konfigurationsdatei die Attribute lesen (wie ich oben geschrieben habe) und dann ebe übergeben.
gibts da vielleicht schon was? und wie würde das mit XML gehen (kann ich das von einer XML- Datei so einlesen, wie oben beschrieben?)

lg
 

Leroy42

Top Contributor
Das mußt du schon mit einer HashMap selbst machen:

Code:
	HashMap<String, Object> attribs = new HashMap<String, Object>();
	attribs.put("Color", Color.RED);
	attribs.put("Size", 42.0f);
	for (Map.Entry<String,Object> attrib : attribs.entrySet())
		if (attrib.getKey().equals("Color"))
			setColor((Color) attrib.getValue());
		else if (attrib.getKey().equals("Size"))
			setFont(getFont().deriveFont(((Float) attrib.getValue()).floatValue()));
                        ...

Mir persönlich wäre das viel zu aufregend :cool:
 

MQue

Top Contributor
kann ich das mit XML so mache, wie oben angegeben, óder gibts da eine bessere Methode und gibts da vielleicht eine Link oderso wo ich das nachlesen könnte?

lg
 

para_

Bekanntes Mitglied
:lol: :lol: :lol: geht jetz vorbei an deiner ursprünglichen frage, ABER:

falls du das mit XML machen möchtest, hier kriegst du JDOM
http://www.jdom.org/dist/binary/
das benötigst du, um die xml dateien komfortabel auslesen/speichern zu können ;)

(einfach die jdom-1.0 runterladen, build ausführen und die jdom.jar im build ordner deinem projekt hinzufügen)




hab hier mal was geschrieben, soll nur als beispiel dienen und ist natürlich beliebig erweiterbar (und bestimmt verbesserbar ;) )

habs jetz nich kommentiert, denke es erklärt sich von alleine ( das auslesen aus der XML is auch sehr einfach, wenn du es net gleich verstehst schau dir vielleicht mal die api davon an (www.jdom.org)

ich hab ne klasse für die states eines elements:

Code:
package org.jf;

import java.awt.Color;

public class State {
	
	int elementNr=0;
	int stateNr=0;
	
	// mit standardwerten belegen
	String type="Button";
	String beschriftung="Ein Button";
	String font="Monospaced";
	int fontSize=12;
	int fontStyle=0;
	Color bgColor=Color.WHITE;
	//...
	
	public State() {
	}
	public void setStateNr( int n ) {
		stateNr = n;
	}
	public void setElementNr( int n ) {
		elementNr = n;
	}
	
	public void setBeschriftung( String s ) {
		beschriftung = s;
	}
	public void setFont( String s ) {
		font = s;
	}
	public void setFontStyle( int n ) {
		fontStyle = n;
	}
	public void setFontSize( int n ) {
		fontSize = n;
	}
	public void setBgColor( int r, int g, int b ) {
		bgColor = new Color ( r, g, b);
	}

	public void setType(String s) {
		type = s;
	}
	
	public String toString() {
		return "Element: "+ elementNr + " State: "+ stateNr +": \n\t"+ type + ", "+beschriftung+", ("+ font +", "+ fontSize +", "+ fontStyle +"), "+ bgColor.toString();
	}
	
}

und ne testklasse wo es ne funktion gibt die aus ner datei die states ausliest und in nem vector speichert

Code:
package org.jf;

import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class Main {
	
	Vector<State> states;
	
	public Main() {
		try {
			states = readStates( "prefs.xml" );
			
			for ( int i=0; i<states.size(); i++) {
				System.out.println( states.get(i).toString() );
			}
		}
		catch ( JDOMException e) {}
		catch ( IOException e) {}
		
	}
	
	public static void main( String[] args ) {
		new Main();
	}
	
	public Vector<State> readStates( String xmlFile ) throws JDOMException, IOException {

		Vector<State> vStates= new Vector<State>();
		SAXBuilder builder = new SAXBuilder();
		Document doc = builder.build( xmlFile );
		
		Element root = doc.getRootElement();
		
		Iterator iElements = root.getChildren("Element").iterator();
		while ( iElements.hasNext() ) {
			// element[i]  (zb button1 bei dir)
			Element element = (Element) iElements.next();
			Iterator iStates = element.getChildren("State").iterator();
			while ( iStates.hasNext() ) {
				State newState = new State();
				newState.setType( element.getAttributeValue("type") );
				newState.setElementNr( Integer.valueOf(element.getAttributeValue("id")).intValue() );

				// states für element[i]  (zb button1.state[0] bei dir)
				Element states = (Element) iStates.next();
				newState.setStateNr ( Integer.valueOf(states.getAttributeValue("id")).intValue() );
				Iterator iPrefs = states.getChildren().iterator();
				while ( iPrefs.hasNext() ) {
					Element state = (Element) iPrefs.next();
					if ( state.getName().equals("beschriftung") )
						newState.setBeschriftung(state.getText());
					else if ( state.getName().equals("font") )
						newState.setFont(state.getText());
					else if ( state.getName().equals("schriftGroesse") )
						newState.setFontSize( Integer.valueOf(state.getText()).intValue());
					else if ( state.getName().equals("hintergrundfarbe") ) {
						newState.setBgColor( 
								Integer.valueOf(state.getChild("r").getText()).intValue(),
								Integer.valueOf(state.getChild("g").getText()).intValue(),
								Integer.valueOf(state.getChild("b").getText()).intValue());
					}
					else {
						//....
					}
				}
				vStates.add( newState );
			}
		}
		
		return vStates;
	}

}

hoffe kommst klar damit :)


edit: achso, so könnte dann zb eine passende datei zum auslesen aussehen:

Code:
<Preferences>
	<Element type="Button" id="0">
		<State id="0">
			<beschriftung>Ein</beschriftung>
			<font>Arial</font>
			<schriftGroesse>12</schriftGroesse>
			<hintergrundfarbe>
				<r>0</r>
				<g>255</g>
				[b]0[/b]
			</hintergrundfarbe>
		</State>
		<State id="1">
			<beschriftung>Aus</beschriftung>
			<hintergrundfarbe>
				<r>255</r>
				<g>0</g>
				[b]0[/b]
			</hintergrundfarbe>
		</State>
	</Element>
	<Element type="Button" id="1">
		<State id="0">
			<beschriftung>Button2</beschriftung>
			<font>Verdana</font>
		</State>
	</Element>
	<Element type="Button" id="2">
		<State id="0">
			<beschriftung>Button3</beschriftung>
			<font>Arial</font>
			<schriftGroesse>30</schriftGroesse>
			<hintergrundfarbe>
				<r>200</r>
				<g>200</g>
				[b]200[/b]
			</hintergrundfarbe>
		</State>
	</Element>	
</Preferences>
 

MQue

Top Contributor
Hallo nochmal,


könntest Du/könntet Ihr mir vielleicht kurz den Zusammenhang der zwei oberen Klassen beschreiben, Vor allem komme ich bei diesem Statement: Vector<State> vStates= new Vector<State>(); nicht mit, was bedeutet das. Ich kenne das nur con C++ (das ist ja in C++ ein TypeCast oder so etwas!?)

Vielen Dank für Eure hilfe!!

lg
Michl
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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 Button-Array überschreiben und dem Container zufügen? Allgemeine Java-Themen 2
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 Array verschieben klappt nicht. Allgemeine Java-Themen 6
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 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
OnDemand XML desializing Attribute bringt nicht erwartetes Ergebnis Allgemeine Java-Themen 16
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
Junger_Basileus Attribute, Arrays, Schleifen Allgemeine Java-Themen 9
L xml node mit attribute auslesen Allgemeine Java-Themen 2
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
D JSF Bean Attribute bei Seitenaufruf Allgemeine Java-Themen 6
C Attribute aus HTML Tags auslesen Allgemeine Java-Themen 6
B Mp3-Attribute auslesen & beschreiben Allgemeine Java-Themen 6
M PDF Drucker-Attribute hinterlegen Allgemeine Java-Themen 3
E Finale Attribute und Konstruktor Allgemeine Java-Themen 3
T [htmlparser.sourceforge.net] Attribute extrahieren Allgemeine Java-Themen 3
T Namenskonventionen für Objekt-Attribute Allgemeine Java-Themen 12
J Attribute eines Objekts in ByteArray Allgemeine Java-Themen 3
I Attribute in Textfile auslesen Allgemeine Java-Themen 13
G [JDK 6u2] - JAR Failed to load Main-Class manifest attribute Allgemeine Java-Themen 6
E Attribute in Interfaces möglich? Allgemeine Java-Themen 17
F JSP XML ATTRIBUTE Allgemeine Java-Themen 2
H Nullpointer exception, Attribute in Label schreiben? Allgemeine Java-Themen 4
L Alle Attribute eines Source-Files auslesen Allgemeine Java-Themen 2
J Attribute beim Drucken ändern/ausstellen Allgemeine Java-Themen 8
A Dynamisch Attribute hinzufügen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben