3Danke
ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
248
248
EMPFEHLEN
-
Hallo,
ich habe ein Problem mit einer Aufgabe. Ich soll ein Panel erstellen was zwei Bereiche hat. Oben einfach nur ne Farbe und unten drei Buttons mit Farbnamen. Drückt man also z.B. auf Button "blau" soll der obere Bereich blau werden. Hier ist mal mein Code:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
import java.awt.* ; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JFrame; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class MemoFrame extends JFrame { public static void main(String[] args) { MemoFrame derTest = new MemoFrame(); } public MemoFrame() { super("Memo"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation(0,0); setSize(450,450); add(getMyPanel()); setVisible(true); } public JPanel getMyPanel(){ JButton[] Knoepfe = new JButton[3]; Knoepfe[0] = new JButton("Rot"); Knoepfe[0].addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { if(e.getActionCommand().equals("Rot")) { System.out.println("Button Rot wurde gedrückt"); Leinwand.setBackground(Color.red); } } }); Knoepfe[1] = new JButton("Grün"); Knoepfe[2] = new JButton("Blau"); JPanel Leinwand = new JPanel(); Leinwand.setBackground(Color.yellow); Leinwand.setSize(150,150); JPanel Flaeche = new JPanel(); Flaeche.setSize(this.getSize()); Flaeche.setLocation(0,0); Flaeche.setLayout(new GridLayout(1,3)); for (Component c: Knoepfe) Flaeche.add(c); Flaeche.add(Leinwand); JPanel Bereich = new JPanel(); Bereich.setSize(300, 200); Bereich.setLayout(new GridLayout(2,1)); Bereich.add(Leinwand); Bereich.add(Flaeche); return Bereich; } }
An der Stelle wo ich sage Leinwand.setBackground..... geht nix mehr weil ich nicht auf das Objekt zugreifen kann. Was kann man da machen?
Danke schonmal im vorraus.Geändert von starbug (31.08.11 um 08:24 Uhr)
-
30.08.11 19:40 #2SE Tutorials.de Gastzugang
Also mal abgesehen davon das du gegen jede Konvention gehst und nur CODE statt JAVA - Tags verwendest *was die Lesbarkeit einschränkt* fehlt die genaue Fehlermeldung. Weil so wie der Code an dieser Stelle ist solltest du eigentlich zugriff auf das Objekt haben ... es sei denn das du auf Grund der Konventions-Missachtung einen Konflikt zwischen Klasse und Objekt hast was dir der Compiler aber anzeigen sollte.
//EDIT
Es ist mir erst beim zweiten Mal aufgefallen ...
Welche Info gefehlt hat : das du das JPanel.setBackground(Color) im ActionListener meinst und nicht dierekt unter der Erzeugen dessen.
Natürlich kannst du innerhalb des ActionListener nicht darauf zugreifen weil du es an dem Punkt noch gar nicht deklariert hast. Außerdem müsste , wenn es dann an der richtigen Stelle stehen würde , das JPanel als final deklariert werden um den Zugriff von einer inneren Klasse zu ermöglichen.
Du könntest auch das JPanel in eine globale Variable packen und den ActionListener dierekt in deiner Klasse implementieren. So sparst du dir neben 3 anonymen inneren Klassen auch noch Code-duplizierung weil du alles nur einmal schreiben musst.
Auch stimmt die IF() nicht da du kein ActionCommand abfragen kannst wenn du dieses vorher nicht gesetzt hast.Geändert von SE (30.08.11 um 19:45 Uhr)
-
Hi,
wenn das ActionCommand nicht explizit angegeben wird, gildt der Text, auf dem JButton, JMenuItem, ...
Gruß
-
Ich sollte Anonyme Klassen verwenden
-
30.08.11 19:58 #5SE Tutorials.de Gastzugang
@JDev
THX ... das wusste ich noch nicht ... man lernt nie aus.
@starbug
Wer bitte hat dir denn diese Aufgabe gestellt ? Vermutlich jemand der nicht weis das du dann 3 mal den selben Code im Source stehen hast oder der sich nichts aus optimiertem Code macht ... rein produktiv gesehen würde man hier definitiv KEINE inneren Klassen verwenden weil es wie gesagt Code-duplizierung wäre.
Um die editierung deines Source möchte ich dich dennoch bitten damit er den Konventionen entspricht.
Ich lese ja nun schon länger deine Threads und habe festgestellt das du es scheinbar so schön falsch gleich vom ersten Tag an beigebracht bekommen hast. Google einfach mal nach "Java Code Conventions" und vielleicht gibst du diesen Tipp auch mal dem der es dir falsch beigebracht hat. Das sieht nämlich sehr Anfängerhaft aus.
Ähnliche Themen
-
MYSQL - von 1 Server auf eine andere DB zugreifen
Von Photocharts im Forum PHPAntworten: 11Letzter Beitrag: 26.05.06, 00:28 -
Auf andere Programme zugreifen
Von General Hunter im Forum Visual Basic 6.0Antworten: 9Letzter Beitrag: 11.03.05, 14:25 -
zugreifen auf eine andere anwendung
Von relayx im Forum C/C++Antworten: 4Letzter Beitrag: 04.05.04, 21:34 -
Materialglühen glüht durch andere andere Objekte durch :(
Von BeBiBu im Forum Cinema 4DAntworten: 8Letzter Beitrag: 13.04.04, 19:50 -
auf objekte variabel zugreifen?
Von bad taste im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 30.07.02, 14:36





Zitieren
Login





