HudWindows

Hi, keine Ahnung ob das schon jemand probiert hat, aber ich will ein HudWindow mit einem Button und einem Label erstellen, aber der Button und das Label wird nicht angezeigt…

kann mir da jemand helfen?

import com.explodingpixels.macwidgets.HudWidgetFactory;
import com.explodingpixels.macwidgets.HudWindow;
import java.awt.EventQueue;
import java.awt.event.ComponentListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class hud {
    
    

    
    public static void main(String[] args) {
     
         //Use the event dispatch thread for Swing components
         EventQueue.invokeLater(new Runnable()
         {
             
            @Override
             public void run()
             {
                 
                 hud();          
             }
         });
              
    }
    
    

    

        public static void hud() {
            HudWindow hud = new HudWindow("Window");
            hud.getJDialog().setSize(300, 350);
            hud.getJDialog().setLocationRelativeTo(null);
            hud.getJDialog().setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            hud.getJDialog().setVisible(true);
            
            JLabel label = HudWidgetFactory.createHudLabel("Label");
            JButton button = HudWidgetFactory.createHudButton("Button");
            hud.getJDialog().add(label);
            hud.getJDialog().add(button);
            hud.getContentPane().add(button);
            
            
        }
    }
    

Mir sagt die Klasse HudWindow zwar nichts, aber dein Fehler ist folgender:
Die setVisible() Methode ruft man erst ganz am Ende auf. Das Hinzufügen einer Elemente muss also vor diesem Aufruf passieren.
Außerdem solltest du noch ein hud.getJDialog().pack(); vor das setVisible() setzen.

hud.getJDialog().add(button);```
Je nach Layout der Komponente, die getJDialog() zurückliefert, überschreibst du dir mit dem zweiten add() Aufruf die erste Komponente. Bei einem BorderLayout musst du noch eine LayoutConstraint mitgeben.

Danke…

Es hat noch button.setSize(100, 40); gefehlt!

Du solltest alle deine Komponenten auf das ContentPane des HudWindow adden.

hud.getContentPane().add(button);

Das hier ist wohl nicht so gut:

hud.getJDialog().add(button);

Hm, das klingt jetzt aber erst einmal falsch. Sobald man einen LayoutManager verwendet, braucht man keinen setSize()-Aufruf mehr. Die meisten LayoutManager ignorieren die Angabe auch völlig. Per setPreferredSize kann man dem LayoutManager sagen, wie groß man diese Komponente gerne haben möchte.
Magst du vielleicht nochmal deinen Quellcode zeigen?

Geht es bei Hud nicht um Transparenz und um Benutzereingaben auch bei nicht aktiviertem “Window”? Letzteres ist ausgeschlossen, wenn man nicht gerade einen Globale KeyHook in C implementiert, oder?