Hi Leute,
mal wieder ein kleines Kskb.
Zwei Dinge die ich nicht ganz hinbekomme.
1.) wenn man das Fenster maximiert bevor man das popupmenu das erste Mal aufruft...gibt es kein pupup sondern Buttons auf dem Fentser bzw. dem JPanel... keine Ahnung warum, vielleicht hat jemand einen Tipp!?
2.) solange man die Alt-Taste drückt wird an der Stelle des Cursors ein blauer Strich gezeichnet. Ich verstehe nicht warum dieser Strich beim Auslassen der Taste nicht immer gleich weg ist. Eigentlich sollte die boolean altpressed auf false gesetzt werden und dann paintImmediately() ausgeführt werden. In der paintComponent() wird diese Linie, wenn altpressed=false, nicht gezeichnet. Sollte also weg sein sobald paintImmediately() ausgeführt wurde.
Der Code:
Danke für Eure Hilfe. Bei Fragen...nicht schüchtern sein :wink:
Beste Grüße
Andi
mal wieder ein kleines Kskb.
Zwei Dinge die ich nicht ganz hinbekomme.
1.) wenn man das Fenster maximiert bevor man das popupmenu das erste Mal aufruft...gibt es kein pupup sondern Buttons auf dem Fentser bzw. dem JPanel... keine Ahnung warum, vielleicht hat jemand einen Tipp!?
2.) solange man die Alt-Taste drückt wird an der Stelle des Cursors ein blauer Strich gezeichnet. Ich verstehe nicht warum dieser Strich beim Auslassen der Taste nicht immer gleich weg ist. Eigentlich sollte die boolean altpressed auf false gesetzt werden und dann paintImmediately() ausgeführt werden. In der paintComponent() wird diese Linie, wenn altpressed=false, nicht gezeichnet. Sollte also weg sein sobald paintImmediately() ausgeführt wurde.
Der Code:
Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
public class kskb_popup extends JFrame implements KeyListener{
JPopupMenu popUpM;
Pane pane;
boolean altpressed;
class Pane extends JPanel{
int mausX, mausY;
public Pane(){
}
public void paintComponent(Graphics g){
// Grösse des JPanels an die möglichweise veränderte Fenstergrösse anpassen
setSize(this.getParent().getWidth()-this.getParent().getInsets().left-this.getParent().getInsets().right,
this.getParent().getHeight()-this.getParent().getInsets().top-this.getParent().getInsets().bottom);
super.paintComponents(g);
g.setColor(Color.blue);
// immer zeichnen
g.drawRect(0,0,this.getParent().getWidth()-this.getParent().getInsets().left-this.getParent().getInsets().right,
this.getParent().getHeight()-this.getParent().getInsets().top-this.getParent().getInsets().bottom);
// nur zeichnen wenn alt gedrückt wird
if (altpressed)g.drawLine(mausX,0,mausX,getHeight());
}
}
//Konstruktor
public kskb_popup(){
setLocation(0,0);
setSize(300, 150);
setVisible(true);
//addWindowListener(this);
addKeyListener(this);
pane = new Pane();
pane.setLocation(0,0);
pane.setSize((getWidth()-getInsets().left)-getInsets().right,(getHeight()-getInsets().top)-getInsets().bottom);
getContentPane().add(pane);
popUpM = new JPopupMenu();
getContentPane().add(popUpM);
JMenuItem[] jmi = new JMenuItem[5];
ActionListener al_fake = new ActionListener(){
public void actionPerformed(ActionEvent e){
popUpM.setVisible(false);
}
};
for (int i=0;i<5;i++){
jmi[i]=new JMenuItem("Test " + i);
jmi[i].addActionListener(al_fake);
popUpM.add(jmi[i]);
}
addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
pane.mausX = (int)e.getPoint().getX()-getInsets().left;
repaint();
}
});
addMouseListener(new MouseListener(){
public void mouseClicked (MouseEvent e ){ }
public void mousePressed (MouseEvent e ){}
public void mouseEntered (MouseEvent e ){}
public void mouseExited (MouseEvent e ){}
public void mouseReleased(MouseEvent e ){
if (e.isPopupTrigger()){
popUpM.setLocation(getLocation().x+e.getX(),getLocation().y+e.getY());
popUpM.setVisible(true);
}
}
});
}
// Konstruktor-Ende
public static void main(String[] args) {
new kskb_popup();
}
public void keyTyped(KeyEvent e){}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ALT){altpressed = true;}
System.out.println("pressed");
pane.paintImmediately(pane.getX(),pane.getY(),pane.getWidth(),pane.getHeight());
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode()==KeyEvent.VK_ALT){altpressed = false;}
System.out.println("released");
pane.paintImmediately(pane.getX(),pane.getY(),pane.getWidth(),pane.getHeight());
}
}
Danke für Eure Hilfe. Bei Fragen...nicht schüchtern sein :wink:
Beste Grüße
Andi