Hallo Leute,
ich versuche die ganze Zeit zwei Minimalbeispiele einer GUI hinzukriegen, aber leider läuft im 2. Beispiel die ganze Zeit was schief. Beim ersten Bsp. habe ich versucht möglichst modular aufzubauen, und beim zweiten Bsp möglichst alles in eine Datei zu packen:
Bsp 1:
---------
Datei 1: C01JFrame.java
Datei 2: C01JPanel.java
Datei 3: C01Tester.java
Warum resized oder packed das zweite grüne Panel vollständig über das Rote. Ich dachte eher daran, dass das rote Panel doch noch sichtbar sein würde. Und warum funzt es nicht wenn ich überall auf das JFrame mit getContentPane() zugreife anstatt mit this ?
Beispiel 2:
---------------
Datei C02JFrame.java
Krieg' im unteren Teil, gar keine Panels mehr hin. Jemand ne Idee was ich da machen könnte ?
Und noch was zu den Listener, s'is doch so, dass
ereignissAuslöser.addListener(empfänger) den Listener beim Auslöser registriert und nach oben weiterreicht oder ?
müsste ich dann bei einem Textfeld,
textfeld.addListener(myJPanel) und dann myJPanel.addListener(myJFrame) und dann myJFrame.addListener(myJFrame) implementieren ? Hab hier vorwärts, rückwärts und seitwärts alles durch, raff's irgendwie nicht, würde mich freuen, wenn jemand ein paar Tips hätte
Viele Grüß Elischa
ich versuche die ganze Zeit zwei Minimalbeispiele einer GUI hinzukriegen, aber leider läuft im 2. Beispiel die ganze Zeit was schief. Beim ersten Bsp. habe ich versucht möglichst modular aufzubauen, und beim zweiten Bsp möglichst alles in eine Datei zu packen:
Bsp 1:
---------
Datei 1: C01JFrame.java
Java:
import java.awt.Color;
import javax.swing.JFrame;
public class C01JFrame extends JFrame {
private static final long serialVersionUID = 1L;
private C01JPanel myJPanel01;
public C01JFrame() {
super("FrameFenster");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setSize(800,600);
this.setBackground(Color.red);
myJPanel01 = new C01JPanel();
myJPanel01.setSize(300,200);
myJPanel01.setBackground(Color.green);
myJPanel01.setVisible(true);
this.addKeyListener(myJPanel01);
this.add(myJPanel01);
}
}
Datei 2: C01JPanel.java
Java:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
public class C01JPanel extends JPanel implements KeyListener {
private static final long serialVersionUID = 1L;
private String a = "bla blub";
public C01JPanel() {
this.addKeyListener(this);
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ESCAPE) {
System.out.println("Hello");
repaint();
}
}
public void keyTyped(KeyEvent ke) { }
public void keyReleased(KeyEvent ke) { }
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(10,10,10,10);
g.drawString(a, 200, 300);
}
}
Datei 3: C01Tester.java
Java:
public class C01Tester {
public static void main(String[] args) {
new C01JFrame();
}
}
Warum resized oder packed das zweite grüne Panel vollständig über das Rote. Ich dachte eher daran, dass das rote Panel doch noch sichtbar sein würde. Und warum funzt es nicht wenn ich überall auf das JFrame mit getContentPane() zugreife anstatt mit this ?
Beispiel 2:
---------------
Datei C02JFrame.java
Java:
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class C02JFrame extends JFrame {
private static final long serialVersionUID = 1L;
String a= "bla blub";
Container con;
// custom jpanels declarations & instances used in outer JFrame
CinnerJPanel myJPanel01;
// constructor of outer JFrame class
public C02JFrame() {
setSize(700,450);
setBackground(Color.red);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myJPanel01 = new CinnerJPanel();
addKeyListener(myJPanel01);
add(myJPanel01);
con = this.getContentPane();
}
// definition of custom JPanel inner class
class CinnerJPanel extends JPanel implements KeyListener {
// var & declarations inner class
private static final long serialVersionUID = 1L;
// constructor inner class
CinnerJPanel() {
this.setSize(200,200);
this.setBackground(Color.green);
this.setVisible(true);
con.addKeyListener(this);
//con.addKeyListener(this);
}
// Listener inner class override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ESCAPE) {
System.out.println("hoi !");
repaint();
}
}
public void keyReleased(KeyEvent arg0) { }
public void keyTyped(KeyEvent arg0) { }
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect(400, 500, 60, 100);
g.drawString("huhu !", 50, 80);
}
} // end of inner class
// methods & flow of outer JFrame class
// ...
// runner
public static void main (String[] args) {
new Mini_JFrame();
}
}
Krieg' im unteren Teil, gar keine Panels mehr hin. Jemand ne Idee was ich da machen könnte ?
Und noch was zu den Listener, s'is doch so, dass
ereignissAuslöser.addListener(empfänger) den Listener beim Auslöser registriert und nach oben weiterreicht oder ?
müsste ich dann bei einem Textfeld,
textfeld.addListener(myJPanel) und dann myJPanel.addListener(myJFrame) und dann myJFrame.addListener(myJFrame) implementieren ? Hab hier vorwärts, rückwärts und seitwärts alles durch, raff's irgendwie nicht, würde mich freuen, wenn jemand ein paar Tips hätte
Viele Grüß Elischa