# Toolbar



## IwiS (14. Feb 2012)

Hallo alle zusammen,

ich schreibe ein Programm, das mir bei meinem PC-Alltag, inform einer Schnellzugriffstoolbar, helfen soll. Nun möchte ich aber nicht, dass ich das Programm in der Taskleiste angezeigt bekomme. Gibt es eine Möglichkeit, dass ich ein Programm laufen lassen kann, ohne dass ich es in der Taskleiste angzeigt bekomme?

Vielen Dank für Antworten,
IwiS


----------



## Gast2 (14. Feb 2012)

Nimm statt nem JFrame nen normales [JAPI]JWindow[/JAPI], das sollte dann nicht in der Taskleiste angezeigt werden.


----------



## IwiS (14. Feb 2012)

Hallo,

danke, genau das was ich gesucht habe. Bin dir sehr dankbar.

lg IwiS


----------



## IwiS (14. Feb 2012)

Hallo zusammen,

jetzt habe ich noch ein Problem. Ich habe jetzt nur ein JWindow, jedoch habe ich darin ein JTextField eingebaut, was aber nicht editierbar ist. Ich habe schon bei Google die Lösung gefunden, dass man bei JWindow als "owning parent" einen JFrame angeben kann, ich verwende allerdings kein JFrame in meinem Programm. Gibt es jetzt noch eine andere Möglichkeit, in einem JWindow ein funktionierendes JTextField einzufügen?

Danke schon im Vorraus für Antworten,
IwiS


----------



## L-ectron-X (14. Feb 2012)

Probiers mal aus:

```
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyWindow {
   private JTextField txtField;
   private JButton okButton;
   
   public MyWindow() {
      final JDialog window = new JDialog();
      window.setUndecorated(true);
      window.getContentPane().setBackground(Color.PINK);
      window.setLayout(new GridBagLayout());
      GridBagConstraints gbc = new GridBagConstraints();
      
      txtField = new JTextField(15);
      okButton = new JButton("OK");
      okButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            window.dispose();
         }
      });
      
      gbc.anchor = GridBagConstraints.WEST;
      gbc.insets = new Insets(30, 10, 0, 0);
      window.add(new JLabel("Eingabe:"), gbc);

      gbc.gridy = 1;
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.weightx = 1.0;
      gbc.insets = new Insets(0, 10, 30, 5);
      window.add(txtField, gbc);
      
      gbc.gridx = 1;
      gbc.fill = GridBagConstraints.NONE;
      gbc.weightx = 0.0;
      gbc.insets = new Insets(0, 0, 30, 10);
      window.add(okButton, gbc);

      window.pack();
      window.setLocationRelativeTo(null);
      window.setVisible(true);
   }

   public static void main(String[] args) {
      try {
         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      }
      catch(Exception e) {
         e.printStackTrace();
      }

      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            new MyWindow();
         }
      });
   }
}
```


----------



## IwiS (14. Feb 2012)

Hi,

ich brauche unbedingt ein JWindow, da gibt es keine andere Möglichkeit.

IwiS


----------



## GUI-Programmer (14. Feb 2012)

IwiS hat gesagt.:


> Hi,
> 
> ich brauche unbedingt ein JWindow, da gibt es keine andere Möglichkeit.
> 
> IwiS



Ja und??? Dann benutz doch eines. Ich sehe da jetzt nichts was dagegen sprechen würde. L-ectron-X hat dir doch schon ein gutes Beispiel geliefert. Du musst uns schon mitteilen, was nicht funktioniert (falls denn was nicht funktioniert!).


----------



## L-ectron-X (15. Feb 2012)

IwiS hat gesagt.:


> ich brauche unbedingt ein JWindow, da gibt es keine andere Möglichkeit.


Was lässt dich da so sicher sein? Kannst du das näher erläutern?


----------



## truesoul (15. Feb 2012)

Hallo, 
leider ist das ein Bug.
Bug ID: 4254005 JTextField gets no focus in JWindow


----------



## bERt0r (15. Feb 2012)

Das steht aber auch, dass es mit einem TextField funktionieren sollte. Mit Java7 solltest du beim AWT und Swing mischen keine Probleme mehr haben.


----------



## truesoul (15. Feb 2012)

bERt0r hat gesagt.:


> Das steht aber auch, dass es mit einem TextField funktionieren sollte. Mit Java7 solltest du beim AWT und Swing mischen keine Probleme mehr haben.



Habe es auch getestet(mit TextField und JTextField) nur mit dem gleichen Ergebnis wie mit Java6.


----------



## GUI-Programmer (15. Feb 2012)

Habe L-ectron-X Beispiel getestet mit jdk 1.7.0 kompiliert und mit jre 1.7.0... ausgeführt. Sowohl per java als auch per javaw, der Bug bestätigt sich bei mir *nicht*. Das JTextField bekommt immer den Fokus, sowohl direkt beim Aufploppen des JWindows als auch wenn es den Focus wieder erhält oder man in das JTextField klickt.

Mein System:
Betriebssystem: Windows 7 HomePremium 64 bit
Prozessor: Intel Core i5 650 @3.20 GHz
Arbeitsspeicher: 4 GB Ram
Grafikkarte: ATI Radeon HD 5700 Series

Auf was für Systemen habt ihr denn das ganze getestet?


----------



## IwiS (15. Feb 2012)

Hallo,

danke für eure Bemühungen. Ich habe das Problem jetzt auf einen anderen Weg gelöst. Nun habe ich aber zwei neue Fragen. Kann ich mein Programm im Quellcode i-wie in den Autostart des Systems packen? Wie kann ich ein JDialog unverschiebbar machen?

Danke für die Antworten im Vorraus,
IwiS


----------



## adsasdasd (15. Feb 2012)

GUI-Programmer hat gesagt.:


> Habe L-ectron-X Beispiel getestet mit jdk 1.7.0 kompiliert und mit jre 1.7.0... ausgeführt. Sowohl per java als auch per javaw, der Bug bestätigt sich bei mir *nicht*. Das JTextField bekommt immer den Fokus, sowohl direkt beim Aufploppen des JWindows als auch wenn es den Focus wieder erhält oder man in das JTextField klickt.
> 
> Mein System:
> Betriebssystem: Windows 7 HomePremium 64 bit
> ...



In seinem Beispiel wird auch ein JDialog verwendet und nicht JWindow.


----------



## bERt0r (15. Feb 2012)

Zu 1: Google mal Windows Autostart Jar
Zu 2: Setzt den Dialog undecorated (setUndecorated(true))


----------



## truesoul (15. Feb 2012)

IwiS hat gesagt.:


> Hallo,
> 
> danke für eure Bemühungen. Ich habe das Problem jetzt auf einen anderen Weg gelöst. Nun habe ich aber zwei neue Fragen. Kann ich mein Programm im Quellcode i-wie in den Autostart des Systems packen? Wie kann ich ein JDialog unverschiebbar machen?
> 
> ...



Eine ausführbare Datei von deinen Programm in den Autostartordner packen? 
setUndecorated()


----------



## L-ectron-X (15. Feb 2012)

IwiS hat gesagt.:


> Wie kann ich ein JDialog unverschiebbar machen?


...zeigt, dass du dir den Beispielcode offenbar nicht angesehen hast.
Ich glaub, dann ist dir nicht zu helfen.


----------



## GUI-Programmer (15. Feb 2012)

adsasdasd hat gesagt.:


> In seinem Beispiel wird auch ein JDialog verwendet und nicht JWindow.



 Ohh, ups, hab ich ganz übersehen. Hab mir nur den Klassennamen angeschaut...
... 
@bERt0r: Ja stimmt, das könne der TO sehr gut verwenden.
@TO: Wie schaut denn deine Lösung aus???


----------



## IwiS (15. Feb 2012)

Hallo,

okay, das Problem mit dem Autostart ist geklärt, obwohl meine Frage nicht beantwortet wurde, ist jetzt aber auch egal. Ich habe meinen Dialog undecorated() gesetzt, doch ich kann mein Fenster problemlos verschieben.

lg IwiS


----------



## L-ectron-X (15. Feb 2012)

Auf welchem System arbeitest du? Kannst du auch mal dein Code zeigen?


----------



## IwiS (15. Feb 2012)

Hallo,

ich arbeite mit Windows 7 (64-bit). Hier ist der bisherige Code:


```
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Properties;
import javax.swing.*;
import com.jtattoo.plaf.smart.SmartLookAndFeel;

public class Toolbar extends JDialog 
{
 JToolBar toolbar;
 public static void main(String[] args)
 {
  try
  {
   UIManager.setLookAndFeel("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel");
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
  Toolbar tool = new Toolbar();
  tool.setLocation(300, 0);
  tool.setSize(1000, 100);
  tool.setUndecorated(true);
  tool.setVisible(true);
 }
 public Toolbar()
 {
  toolbar = new JToolBar();
  toolbar.setFloatable(false);
  ImageIcon image = new ImageIcon("firefox.png");
  JButton button = new JButton(image);
  button.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
	try
	{
	Process p = Runtime.getRuntime().exec("\"D:Programme\\Mozilla Firefox\\firefox\"");
	}
	catch(IOException e)
	{
     e.printStackTrace();
	}
   }
  }
  );
  toolbar.add(button);
  ImageIcon image2 = new ImageIcon("thunderbird.png");
  JButton button2 = new JButton(image2);
  button2.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
	try
	{
     Process p2 = Runtime.getRuntime().exec("\"D:Programme\\Thunderbird\\thunderbird\"");
	}
	catch(IOException e)
	{
     e.printStackTrace();
	}
   }
  }
  );
  toolbar.add(button2);
  add(toolbar);
 }
}
```

lg IwiS


----------



## L-ectron-X (15. Feb 2012)

Ich habe auch ein Windows 7 64Bit. Dein Programm funktioniert bei mir (LAF deaktiviert). Ich kann die Toolbar nicht verschieben. Das kann eigentlich auch nicht möglich sein, weil die Titelleiste ausgeblendet ist, und ein Fenster nur durch Klicken in die Titelleiste mit anschließendem Ziehen verschoben werden kann.
Einen MouseListener hast du auch nicht an deinem Dialog registriert...
...ich kann keinen Fehler oder Fehlverhalten feststellen. :bahnhof:


----------



## IwiS (15. Feb 2012)

Hallo,

wenn ich das Programm ausführe, kann ich es an eine beliebige andere Stelle ziehen. Mein anders Problem wäre noch, dass nach dem Start des Programmes immer der hinterste Button makiert wird. Kann ich das i-wie verhindern?

lg IwiS


----------



## L-ectron-X (15. Feb 2012)

Versuchs mal mit

```
button.setFocusable(false);
button2.setFocusable(false);
```

Welche Java-Version benutzt du zum Ausführen des Programmes?


----------



## IwiS (15. Feb 2012)

Hallo,

danke, der Tipp für die Buttons hat funktioniert. Ich benutze Java 7 Update 2.

lg IwiS


----------



## L-ectron-X (15. Feb 2012)

Also beim besten Willen.
Ich habs jetzt mal unter Ubuntu mit OpenJDK7 probiert. Das Fenster ist nicht verschiebbar. Allerdings wird in der Taskleiste ein Java-Symbol angezeigt.


----------



## IwiS (15. Feb 2012)

Hi,

ich glaube ich weis, woran der Fehler liegt. Du sagtest ja bei dir sei die Titelleiste ausgeblendet, bei mir aber nicht. Du hast wahrscheinlich ein JWindow verwendet, oder?

lg IwiS


----------



## L-ectron-X (15. Feb 2012)

Nein. Ich habe mein Codebeispiel und deinen Code unverändert ausgeführt. Darin wird jeweils ein JDialog verwendet, dessen Titelleiste mit setUndecorated(true) ausgeblendet wurde.
Wie gesagt: auch dein Beispiel funktioniert bei mir unter Windows 7 und Ubuntu.

[EDIT]Der TO hat einen weiteren Beitrag zum Thema erstellt, welcher hier zu finden ist.[/EDIT]

Thema geschlossen!


----------

