Announcement

Collapse
No announcement yet.

getXOnScreen() bzw. getX() gibts ne Fkt. die sozusagen beides kann?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • getXOnScreen() bzw. getX() gibts ne Fkt. die sozusagen beides kann?

    Hallo, jmd. zumindest ne Idee ?

    Habe in einer Java-Anwendung u.a. eine Liste mit Begriffen(String-Objekte) u. an der rechten Seite einen Scroll-Balken.
    Wenn ich mit der rechten Maustaste auf ein Begriff klicke wird ein Kontext-Menü zum jeweiligen ausgewählten Begriff angezeigt. Wenn ich mit dem Scroll-Balken weiter runterscrolle und ein Begriff auswähle wird das Kontext-Menü auch an der richtigen Position angezeigt...soweit so gut.. benutze dafür die Funktion"e.getXOnScreen()". Wenn ich die Java-Anwendung auf dem Bildschirm verschiebe ist beim erneuten Klicken des Begriffs das Kontext-Menü dementsprechend versetzt.
    Mit der Funktion "e.getX()" wird das Kontext-Menü beim Verschieben immer korrekt angezeigt -> aber beim Scrollen der Liste und dann dem Auswählen des Begriffs versetzt angezeigt

    Gibt es eine Lösung für dieses Problem bzw. muss eine komplizierte mathematische Rechnung erfolgen oder geht das auch einfacher ?

    Gruß Christian

  • #2
    Zu einer Antwprt müsste man wissen, was für Objekte du benutzt
    Christian

    Comment


    • #3
      es handelt sich hierbei um String-Objekte bzw. String Vector.....

      Comment


      • #4
        Auch aufgrund deiner PN, denke ich, dass du offenbar kein Interesse an der Lösung hast
        Christian

        Comment


        • #5
          ohh doch, habe sehr grosses Interesse..hier Teile meines Quellcodes :
          Code:
          public void mouseClicked(MouseEvent e) {
          		if(e.getClickCount()==2)
          		{
          			gui.ladeBegriff((String)this.getSelectedValue(), this.getSelectedIndex());
          		}
          		if(e.getButton()==MouseEvent.BUTTON3)
          		{
          			if(type.equals("liste"))
          			{
          				
          				
          			
          				Point p = e.getPoint();
          				this.setSelectedIndex(this.locationToIndex(p));
          			  //gui.openPopupMenu((String)this.getSelectedValue(), e.getX(), e.getY());
          				gui.openPopupMenu((String)this.getSelectedValue(), e.getXOnScreen(), e.getYOnScreen());
          				
          			}
          		}
          	}
          Code:
          public void openPopupMenu(String begr, int x, int y)
          	{
          		popMenu.removeAll();
          		
          	    item_info.setText("<html><b>"+begr+"</b></html>");
          	    popMenu.add(item_info);
          		
          	  
          	    	
          	    popMenu.updateUI();
          	     
          	       popMenu.show(this, x-180, y-190);   //getXOnScreen & getYOnScreen
          	    // popMenu.show(this, x+35, y+181);   // getX() & getY()
          	  
          	}

          Comment


          • #6
            ich kann aus deinem Code nicht erkennen, wo mit WAS?? überhaupt die Liste dargestellt wird. Offenbar wird ein Popup zu Darstellung "missbraucht".
            Hier ein Beispiel mit einer JList. Diese enthält 5 Strings. Egal wo das Fenster ist, beim Klick in die Liste wir das Element ausgewählt und das Popup an der richtigen Stelle dargestellt

            [highlight=java]
            public class NewJDialog extends javax.swing.JDialog
            {
            public NewJDialog(java.awt.Frame parent,boolean modal)
            {
            super(parent,modal);
            initComponents();
            }

            private void initComponents() {

            jPopupMenu1 = new javax.swing.JPopupMenu();
            jMenuItem1 = new javax.swing.JMenuItem();
            jScrollPane1 = new javax.swing.JScrollPane();
            jList1 = new javax.swing.JList();

            jMenuItem1.setText("jMenuItem1");
            jPopupMenu1.add(jMenuItem1);

            setDefaultCloseOperation(javax.swing.WindowConstan ts.DISPOSE_ON_CLOSE);

            jList1.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
            });
            jList1.setComponentPopupMenu(jPopupMenu1);
            jList1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
            jList1MouseClicked(evt);
            }
            });
            jScrollPane1.setViewportView(jList1);

            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(111, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(97, Short.MAX_VALUE))
            );

            pack();
            }

            private void jList1MouseClicked(java.awt.event.MouseEvent evt)
            {
            jMenuItem1.setText((String)jList1.getSelectedValue ());
            jPopupMenu1.show(jList1,evt.getX(),evt.getY());
            }

            public static void main(String args[])
            {
            java.awt.EventQueue.invokeLater(new Runnable()
            {
            public void run()
            {
            NewJDialog dialog=new NewJDialog(new javax.swing.JFrame(),true);
            dialog.addWindowListener(new java.awt.event.WindowAdapter()
            {
            public void windowClosing(java.awt.event.WindowEvent e)
            {
            System.exit(0);
            }

            });
            dialog.setVisible(true);
            }

            });
            }

            // Variables declaration - do not modify
            private javax.swing.JList jList1;
            private javax.swing.JMenuItem jMenuItem1;
            private javax.swing.JPopupMenu jPopupMenu1;
            private javax.swing.JScrollPane jScrollPane1;
            // End of variables declaration
            }

            [/highlight]
            Christian

            Comment


            • #7
              Danke für das Beispiel, dass ich erstmal verdauen muss .. jedenfalls würde hier auch das kontext-Menü an der richtigen Stelle am Begriff sein, wenn die Liste wesentlich mehr Begriffe hätte die über ein Scrollbalken gesucht werden müssten?

              Comment


              • #8
                ja..........
                Christian

                Comment

                Working...
                X