2017-01-17 1 views
3

Je souhaite définir un emplacement spécifique pour un JToolBar lorsque je lance l'application. Y at-il un moyen de définir l'emplacement flottant d'un JToolBar sur un point spécifique sur l'écran?Définition d'un emplacement spécifique pour un JToolBar flottant

J'ai ce code comme exemple qui va créer une barre d'outils et essaye de le définir flottant à Point (300,200), mais à la place il l'affiche (flottant) à l'emplacement (0,0).

public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JToolBar toolbar = new JToolBar(); 
    toolbar.add(new JButton("button 1")); 
    toolbar.add(new JButton("button 2")); 

    Container contentPane = frame.getContentPane(); 
    contentPane.add(toolbar, BorderLayout.NORTH); 

    ((BasicToolBarUI) toolbar.getUI()).setFloating(true, new Point(300, 200)); 

    frame.setSize(350, 150); 
    frame.setVisible(true); 
} 

Merci

Répondre

2

À partir du code source de setFloating(boolean, Point), le paramètre Point est uniquement utilisé n cas d'un premier paramètre false, et est utilisé pour trouver l'emplacement pour ancrer la barre d'outils à son Container d'origine.

Fondamentalement, floating étant le paramètre booléen, il va comme:

if(floating), détacher la barre d'outils et le mettre dans un Window, quel emplacement correspond aux variables de BasicToolBarUIfloatingX et floatingY internes (le paramètre Point est pas utilisez-le)

else, de l'ancrer à Container, en utilisant le paramètre Point pour trouver où l'ancrer (Nord, Est ...). Heureusement, une méthode existe pour modifier les valeurs de floatingX et floatingY: setFloatingLocation(int x, int y). Appelez simplement cette méthode avant d'appeler le setFloating (auquel vous pouvez passer un paramètre nullPoint, car il ne sera pas utilisé de toute façon).

((BasicToolBarUI) toolbar.getUI()).setFloatingLocation(300, 200); 
((BasicToolBarUI) toolbar.getUI()).setFloating(true, null); 
0

Pour donner à la barre d'outils une disposition absolue d'abord vous devez définir la mise en page à null comme ceci: frame.setLayout(null); Alors, au lieu de ((BasicToolBarUI) toolbar.getUI()).setFloating(true, new Point(300, 200)); vous pouvez simplement utiliser toolBar.setBounds(x,y, width, height);

public static void main(String[] args) { 
JFrame frame = new JFrame(); 
frame.setLayout(null); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

JToolBar toolbar = new JToolBar(); 
toolbar.add(new JButton("button 1")); 
toolbar.add(new JButton("button 2")); 

Container contentPane = frame.getContentPane(); 
contentPane.add(toolbar, BorderLayout.NORTH); 

toolBar.setBounds(100,100,50,50); 

frame.setSize(350, 150); 
frame.setVisible(true); 

}