S
soundneeded
Gast
Hi Leute,
ich versuche mir seit ein paar Wochen Java beizubringen und hab aufgrund von Fragen die sich mir gerade stellen ein KSKB geschrieben.
---------------
Frage 1: Mit welchem Befehl lasse ich ein komplettes Fenster neuzeichnen? Im KSKB übernimmt das jetzt ein setVisible(false) gefolgt von einem setVisible(true). Das ist nicht sehr schön, aber repaint() kann ich hier anscheinend nicht anwenden.
---------------
Frage 2: wenn ich ein canvas habe und ich Menüs anschauen will die beim "ausrollen" über das canvas reichen, so ist der teil des Menüs nicht zu sehen der dann hinter dem canvas liegt. Muss ich hier irgendwie das menü vor das canvas legen?
Im KSKB ist das leicht zu beobachten...einfach im GridLayout-Aufruf das (1,2) in (2,1) ändern...schon ist das canvas "südlich" des Menüs.
Um schnell an die gewünschten Stellen zu kommen könnt ihr nach "Frage1" und "Frage2" suchen...dann kommt ihr in die richtige Zeile!
----------------
Frage 3:
Abseits vom KSKB.
Kann ich die Größe eines Fensters abhängig vom Inhalt machen? Beispiel: ich hab ne Liste mit x Elementen, die eine möglichkeit wäre das Fenster scrollable zu machen, die andere das Fenster(solange x nicht zu groß wird) anzupassen. Natürlch hab ich die Möglichkeit die benötigte Fenstergrösse anhand von x zu errechnen, aber vielleicht gibt es ja sowas auch schon in den JFrame-Möglichkeiten und ich habs nur übersehen. Vielleicht kann mir hier jemand ein Stichwort geben nach dem ich die API durchforsten kann.
Dabei belass ich es erstmal, ist ja schon eine ganze Menge die ich da frage. Ich habe versucht es Euch so leicht wie möglich zu machen. Freu mich auch auf Kritik wie ich es meinen Helfern das nächste Mal noch einfacher machen kann.
Großes Dankeschön an alle die sich die Zeit nehmen.
beste Grüße
Andi
ich versuche mir seit ein paar Wochen Java beizubringen und hab aufgrund von Fragen die sich mir gerade stellen ein KSKB geschrieben.
---------------
Frage 1: Mit welchem Befehl lasse ich ein komplettes Fenster neuzeichnen? Im KSKB übernimmt das jetzt ein setVisible(false) gefolgt von einem setVisible(true). Das ist nicht sehr schön, aber repaint() kann ich hier anscheinend nicht anwenden.
---------------
Frage 2: wenn ich ein canvas habe und ich Menüs anschauen will die beim "ausrollen" über das canvas reichen, so ist der teil des Menüs nicht zu sehen der dann hinter dem canvas liegt. Muss ich hier irgendwie das menü vor das canvas legen?
Im KSKB ist das leicht zu beobachten...einfach im GridLayout-Aufruf das (1,2) in (2,1) ändern...schon ist das canvas "südlich" des Menüs.
Um schnell an die gewünschten Stellen zu kommen könnt ihr nach "Frage1" und "Frage2" suchen...dann kommt ihr in die richtige Zeile!
----------------
Frage 3:
Abseits vom KSKB.
Kann ich die Größe eines Fensters abhängig vom Inhalt machen? Beispiel: ich hab ne Liste mit x Elementen, die eine möglichkeit wäre das Fenster scrollable zu machen, die andere das Fenster(solange x nicht zu groß wird) anzupassen. Natürlch hab ich die Möglichkeit die benötigte Fenstergrösse anhand von x zu errechnen, aber vielleicht gibt es ja sowas auch schon in den JFrame-Möglichkeiten und ich habs nur übersehen. Vielleicht kann mir hier jemand ein Stichwort geben nach dem ich die API durchforsten kann.
Dabei belass ich es erstmal, ist ja schon eine ganze Menge die ich da frage. Ich habe versucht es Euch so leicht wie möglich zu machen. Freu mich auch auf Kritik wie ich es meinen Helfern das nächste Mal noch einfacher machen kann.
Großes Dankeschön an alle die sich die Zeit nehmen.
beste Grüße
Andi
Code:
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
class ding{
int zahl;
ding(){zahl=0;} // Konstruktor setzt die zahl auf 0 der OK_Button den man mit dem Menüpunkt aufruft setzt die zahl auf 1.
//Sie existiert lediglich um zu überprüfen, ob das Canvas auch wirlich neu gezeichnet wird.
}
public class kskp extends JFrame{
final ding iks = new ding();
kskp(){
super("TestKSKP");
setSize(200,200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
setLayout(new GridLayout(1,2)); // hier (1,2) zu (2,1) ändern für Frage2
JMenuBar mbar = new JMenuBar();
add(mbar);
JMenu men = new JMenu("Menü");
mbar.add(men);
JMenuItem mItem = new JMenuItem("Menüpunkt");
men.add(mItem);
Canvas zeichnen = new Canvas(){ // diese Zeichenfläche steht stellvertretend für alle die im eigentlichen Progi im Fenster vorkommen
public void paint(Graphics g){
g.drawString(String.valueOf(iks.zahl), 10, 10); // hier steht die Zahl die mit dem ok-button aktualisiert werden soll
}
};
add(zeichnen);
ActionListener al_Fenstal = new ActionListener() {
public void actionPerformed(ActionEvent e){
// ein neues Fenster mit dem Button wird erzeugt
final JFrame fenstal = new JFrame("Fenstal");
fenstal.setSize(50,80);
fenstal.setLocation(200,200);
JButton okButton = new JButton("OK");
fenstal.add(okButton);
ActionListener al_Button = new ActionListener() { // wenn der Button gedrückt wird...
public void actionPerformed(ActionEvent e){
iks.zahl=1;
fenstal.dispose();
// dispose(); // damit wollte ich nur überprüfen ob ich aufs richtige Fenster "zugreife"....tu ich
// mit welchem Befehl aber lass ich das Fenster neu zeichnen? (Frage1)
setVisible(false); setVisible(true); // das funktioniert ist aber nicht sehr schön
/*
// folgenden Umweg könnt ich mir vorstellen....funktioniert aber auch noch nicht
int component_anzahl = getComponentCount(); // zähl die Komponenten (zähl ich da eh das richtige?
for (int i=0; i<component_anzahl; i++){ // und führe für jedes einzelne repaint() aus
System.out.println(i);
getComponent(i).repaint();
}
*/
}
};
okButton.addActionListener(al_Button);
fenstal.setVisible(true);
fenstal.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
};
mItem.addActionListener(al_Fenstal);
setVisible(true);
}
public static void main(String[] args) {
new kskp();
}
}