Text-Info in der Taskbar anzeigen

sirbender

Top Contributor
Hi,

ich will lediglich einen Text in der Taskbar anzeigen. Zum Beispiel die CPU Temperatur:

"CPU Core1-4: ~71 C"

Ich will das nicht in einem Popup oder sonstwie anzeigen, sondern einfach dauerhaft in der Taskbar für jedes OS. Ein Popup zusätzlich wäre hübsch wenn z.B. die Temp. länger als 30sec. über 90 C ist oder so.

Den Code habe ich fertig nur mit dieser Taskbar-Visualisierung tue ich mir schwer.
 

sirbender

Top Contributor
Hmm? Wie ist das wichtig? Ich habe eine Funktion:

updateText(String text)

Rufe ich die Funktion auf, soll der Text in der Taskbar angezeigt werden. Inwiefern ist der Temperatur-Abfragecode wichtig?
 
K

kneitzel

Gast
Zeige mal den Code, mit dem du die Temperatur abfragen kannst.
Das ist der triviale Punkt in meinen Augen. Da bietet sich die oshi Library geradezu an:
implementation 'com.github.oshi:eek:shi-core:4.4.0'

Und dann ein einfaches:
new SystemInfo().getHardware().getSensors().getCpuTemperature();
liefert einen double Wert mit der CPU Temperatur.

Aber die Frage mit der Taskbar ist so universell aus meiner Sicht nicht machbar. Je nach Betriebssystem / GUI ist auch immer die Frage, was für Leisten es überhaupt gibt und wie diese konfiguriert wurden.

Was mit hier einfallen würde als Workaround: Man könnte z.B. ein JFrame bauen, bei dem man setzten könnte:

a) Kein Rahmen und keine Titelleiste:
frame.setUndecorated(true);
Achtung: Das muss gesetzt werden, ehe das Fenster sichtbar gemacht wird.

b) Always on Top:
frame.setAlwaysOnTop(true);

c) Opacity:
frame.setOpacity(0.5f);

d) Darf keinen Focus kriegen:
frame.setFocusable(false);

e) Nicht in der Taskbar anzeigen:
frame.setType(Window.Type.UTILITY);
Achtung: Muss wie das setUndecorated vor dem setVisible gemacht werden!

Das kann dann der User an einen Platz schieben, den er für geeignet hält. Man könnte aber auch erst einmal ein default Platz vorgeben, z.B, ganz oben und mit etwas Abstand an den rechten Rand, so dass die Bedienung der Fenster noch möglich ist.

Ansonsten: Wenn der User eine Taskleiste hat, dann zeigt er ggf. auch die Titel an - also kann man das auch darüber machen. Also einfach ein Fenster, dem man den entsprechenden Titel gibt.
- Funktioniert aber nur, wenn Anwender das auch anzeigen (Ich sehe das z.B. nicht)
- Ggf wird das gefiltert. Gerade unter den diversen Linux Oberflächen ist da einiges möglich.
- Die Taskbar gibt es teilweise nicht. Ubuntu hat oben zwar eine Leiste aber eine Applikation kommt nur mit Icon in die Leiste am linken Rand.

Das wären so meine Ideen.
 
K

kneitzel

Gast
Weil das in Java ohne Fremd Libs nicht geht und ich mir keinen Blödsinn erzählen lassen will.

Ein Taskbar Icon ist natürlich trivial.

Hier verstehe ich Deine Reaktion nicht. Erst einmal kann man ihm glauben, dass er den Code hat. Ist ja auch egal. Er will einen Text anzeigen. Woher der Text kommt ist erst einmal tatsächlich egal. Und da es Dich zu interessieren schien: Ich habe für Dich ja auch einmal aufgezeigt, wie einfach die Information zu kriegen ist. Und er hat nie behauptet, dass er es ohne irgendwelche Libraries gemacht hat.

Und das Problem vom TE ist nicht ein Taskbar icon. Und selbst wenn: Wenn es trivial ist, dann zeige es doch eben auf, wie es geht.
 

sirbender

Top Contributor
@JustNobody vielen Dank. Das mit dem JFrame ohne Decoration hatte ich mir mittlerweile selbst ueberlegt. Aber viele deiner anderen Einstellungen sind noch sehr viel nuetzlicher!

frame.setOpacity(0.5f); klappt leider nicht bei Linux.

frame.setType(Window.Type.UTILITY); funzt scheinbar auch nicht. In meiner Taskliste wird es immer noch angezeigt. Nutze ich es falsch?
 
K

kneitzel

Gast
Hast Du das das frame.setType(Window.Type.UTILITY); gemacht, ehe Du das frame angezeigt hast? Das muss vor dem ersten Anzeigen gemacht werden.

Und unter Windows funktioniert es. Ob das bei Linux bei allen möglichen Distributionen funktioniert kann ich nicht sagen. Da habe ich es bisher nicht getestet.
 

sirbender

Top Contributor
Ja. Liegt wohl an Linux. Kein Problem. Danke fuer die Hilfe.

Ich hab jetzt auch das komplette JFrame/ContentPane/JLabel transparent gemacht. Leider wird dadurch auch der vorherige Text im JLabel nicht entfernt und der neue Text einfach druebergerendert. Alle meine Versuche mit clearRect, invalidate, validate, repaint, usw. sind bisher gescheitert.
 
K

kneitzel

Gast
Ja. Liegt wohl an Linux. Kein Problem. Danke fuer die Hilfe.

Ich hab jetzt auch das komplette JFrame/ContentPane/JLabel transparent gemacht. Leider wird dadurch auch der vorherige Text im JLabel nicht entfernt und der neue Text einfach druebergerendert. Alle meine Versuche mit clearRect, invalidate, validate, repaint, usw. sind bisher gescheitert.
Das wundert mich etwas. Kannst Du da mal den Code zeigen? Oder kleines, minimales Beispiel erstellen und teilen?
 

sirbender

Top Contributor
Eigentlich bin ich zufrieden mit dem Ergebnis. Das Painting-Problem löse ich indem ich die JLabel auf setOpaque(true) setze. Transparent wäre mir lieber aber schlimm ist es nicht. Anbei mal ein Beispiel mit dem Painting-Problem.

Oben Links im Bildschirm erscheint das CPU-Temp Info Fenster. Ich nutze AWTUtilities - vielleicht erlaubt das deine IDE nicht in Java8...also musst du mal schauen wie du das behebst wenn er meckert.

Java:
import java.awt.Color;
import java.awt.FlowLayout;
import java.io.IOException;
import java.net.MalformedURLException;
import java.text.DecimalFormat;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import com.sun.awt.AWTUtilities;

public class Example {

    static final ScheduledThreadPoolExecutor exe = new ScheduledThreadPoolExecutor(1);

    public static void main(String[] args) throws MalformedURLException, IOException {
        JFrame frame = new JFrame(Example.class.getName());
        int gap = 12;
        JPanel contentPane = new JPanel(new FlowLayout(FlowLayout.RIGHT, gap, 5));
        contentPane.setBackground(Color.white);
        frame.setContentPane(contentPane);
        schedule(contentPane);
        schedule(contentPane);

        frame.setAlwaysOnTop(true);
        frame.setType(JFrame.Type.POPUP);
        frame.setUndecorated(true);

        AWTUtilities.setWindowOpaque(frame, false);

        frame.pack();
        frame.setVisible(true);

//        TrayUtils.initTray(frame, () -> System.exit(0));
    }

    static DecimalFormat df = new DecimalFormat("#.00");

    static void schedule(JPanel contentPane) {
        JLabel label = new JLabel();
//        label.setOpaque(true);
        Runnable command = () -> {
            String text = df.format(getCPUTemp());
            label.setText(text);
        };
        command.run();
        int refresh = 5;
        exe.scheduleAtFixedRate(command, refresh, refresh, TimeUnit.SECONDS);
        contentPane.add(label);
    }

    private static Number getCPUTemp() {
        return Math.random() * 100;
    }

}
 
K

kneitzel

Gast
Also die AWT Toolbox ist asbach und du alles vor jdk 8 ist für mich unverständlich muss ich gestehen :)

https://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html könntest Du einmal durchgehen. Da hast du
a) Die genaue Prüfung, was die Umgebung überhaupt kann:

Code:
import static java.awt.GraphicsDevice.WindowTranslucency.*;

// Determine what the default GraphicsDevice can support.
GraphicsEnvironment ge =
    GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();

boolean isUniformTranslucencySupported =
    gd.isWindowTranslucencySupported(TRANSLUCENT);
boolean isPerPixelTranslucencySupported =
    gd.isWindowTranslucencySupported(PERPIXEL_TRANSLUCENT);
boolean isShapedWindowSupported =
    gd.isWindowTranslucencySupported(PERPIXEL_TRANSPARENT);

b) Für jede der drei Varianten Codebeispiele, wie das aussehen würde.

Du kannst also einfach einmal schauen, was Deine Linux Kiste überhaupt unterstützt. Windows unterstützt alles drei und da reicht es einfach aus, das zu setzen wie von mir weiter oben gezeigt. Funktioniert auch bei deinem Code - den AWTToolbox Aufruf ersetzt durch frame.setOpacity(0.55f); und schon ist das durchscheinend....
 

sirbender

Top Contributor
isUniformTranslucencySupported: false
isPerPixelTranslucencySupported: true
isShapedWindowSupported: true


Wie erwähnt geht das bei mir nicht: frame.setOpacity(0.55f);


Exception in thread "main" java.lang.UnsupportedOperationException: TRANSLUCENT translucency is not supported.
at java.awt.Window.setOpacity(Window.java:3627)
at java.awt.Frame.setOpacity(Frame.java:962)
 
K

kneitzel

Gast
Hast Du den Link einmal weiter angesehen? Das setOpacity ist ja das uniform translucency und das ist tatsächlich nicht unterstützt laut der Ausgabe.

Daher solltest Du einmal den Abschnitt "How to Implement Per-Pixel Translucency" des Links ansehen. Das sollte dann ja funktionieren.
 

Blender3D

Top Contributor
Ja. Liegt wohl an Linux. Kein Problem. Danke fuer die Hilfe.
Ich habe einen wissenschaftliche Taschenrechner für Linux und Windows programmiert. Ich verwende da ein Icon in der Titelleiste. Unter Ubuntu hatte ich das Problem, dass das Icon nicht angezeigt wurde. Mein Workaround war hier folgender.
Java:
Properties prop = System.getProperties();
        boolean isLinux = prop.getProperty("os.name").toUpperCase().equals("LINUX") ? true : false;
        if (isLinux)
            JFrame.setDefaultLookAndFeelDecorated(true);
Vielleicht ist Dein Problem ähnlich geartet.
PS. Falls jemand eine bessere Lösung kennt, dann bitte hier posten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C JToggleButton disabled Text Color AWT, Swing, JavaFX & SWT 11
H JavaFX Label.Text mit bind an DoubleProperty binden AWT, Swing, JavaFX & SWT 3
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
FrittenFritze Text in Flying Saucer selectierbar machen AWT, Swing, JavaFX & SWT 0
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
H JavaFX Gedrehter Text auf Canvas (Positionierung) AWT, Swing, JavaFX & SWT 6
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
I Rich Text drucken AWT, Swing, JavaFX & SWT 0
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
N Promt Text der Combobox AWT, Swing, JavaFX & SWT 0
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
N In Textdatei Text anfügen per GUI AWT, Swing, JavaFX & SWT 3
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
R Swing JTextField nicht-kopierbarer Text AWT, Swing, JavaFX & SWT 1
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
B Text im Tetfeld in einer TableView darstellen AWT, Swing, JavaFX & SWT 20
C JCheckBox disabled text color AWT, Swing, JavaFX & SWT 9
ralfb1105 JavaFX Wie Text Label in neuem Window von Main Stage setzen? AWT, Swing, JavaFX & SWT 6
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
L JavaFX TableView kein content text ändern AWT, Swing, JavaFX & SWT 2
L JavaFX Anderer Text, wenn kein Platz ist. AWT, Swing, JavaFX & SWT 1
K JavaFX TextInputDialog Button Text ändern AWT, Swing, JavaFX & SWT 1
S 2D-Grafik affine Transformation für Text-Shape AWT, Swing, JavaFX & SWT 0
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
J Text in ein Textfeld eingeben und speichern AWT, Swing, JavaFX & SWT 27
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
C Swing Spinner als TableCellEditor - Text zu klein AWT, Swing, JavaFX & SWT 2
H JavaFX - Button und Text - Falsche Darstellung AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
I JavaFX formatierter Text in PDF speichern AWT, Swing, JavaFX & SWT 4
T JavaFX Text des ProgressIndicators ändern AWT, Swing, JavaFX & SWT 2
E Swing Text verschwindet AWT, Swing, JavaFX & SWT 1
G JavaFX - Während AudioRecording keine Text eingabe TextField möglich AWT, Swing, JavaFX & SWT 6
G Rectangle Breite richtet such an die Breite vom Text AWT, Swing, JavaFX & SWT 1
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
S JTextArea Text nach oben wandern lassen AWT, Swing, JavaFX & SWT 7
F Icons neben Text in Listview setzen AWT, Swing, JavaFX & SWT 2
K Rich Text FX von TomasMikula AWT, Swing, JavaFX & SWT 0
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4
S JAVAFX HTMLEditor wrap text AWT, Swing, JavaFX & SWT 1
J JavaFX Translation Text/Label AWT, Swing, JavaFX & SWT 2
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
A JavaFX HTMLEditor in Text umwandeln AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
javampir Java FX Text verschwindet nicht AWT, Swing, JavaFX & SWT 9
Tausendsassa Text changed event handler jTextField AWT, Swing, JavaFX & SWT 3
Tom299 JavaFX Text oder Label benutzen AWT, Swing, JavaFX & SWT 4
E To get a color text on the TextArea AWT, Swing, JavaFX & SWT 4
E To get color text on the TextArea AWT, Swing, JavaFX & SWT 5
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
T JavaFX Editable Combobox Text-Selektierung nach Trigger AWT, Swing, JavaFX & SWT 4
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
F JPanel "zeichnet" keinen Text AWT, Swing, JavaFX & SWT 14
U WYSIWYG Text-Editor für JFrames AWT, Swing, JavaFX & SWT 8
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
T MausClick soll TExt ändern AWT, Swing, JavaFX & SWT 6
J Text bei Eingabe löschen AWT, Swing, JavaFX & SWT 5
A SWT Auto completion in text box AWT, Swing, JavaFX & SWT 5
C Geloest: JTextfield: Titel automatisch entfernen, sobald Text eingegeben wird AWT, Swing, JavaFX & SWT 1
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
O Swing Text aus Textfield auslesen AWT, Swing, JavaFX & SWT 8
B Text auf Display ausgeben [LWJGL] AWT, Swing, JavaFX & SWT 2
G Text im textfeld in einem Editor anzeigen AWT, Swing, JavaFX & SWT 18
S TextArea get Selected row(Text) AWT, Swing, JavaFX & SWT 6
A Radio Buttons sollen den Text der text Area bestimmen AWT, Swing, JavaFX & SWT 9
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
J LayoutManager Text Spielerein GUI AWT, Swing, JavaFX & SWT 2
H Javafx - Styled Text AWT, Swing, JavaFX & SWT 5
M Text Area 1. Zeile oben AWT, Swing, JavaFX & SWT 4
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
R JavaFX Automatischer Zeilenumbruch in Text AWT, Swing, JavaFX & SWT 13
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
F Dialog mit Titel, Text und Ok Button AWT, Swing, JavaFX & SWT 2
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
TheJavaKid DocumentListener soll Text in JTextField ändern AWT, Swing, JavaFX & SWT 4
K JEditorPane Text einfügen AWT, Swing, JavaFX & SWT 4
A Text (String) zu einer Box hinzufügen AWT, Swing, JavaFX & SWT 16
B SWT Text - zeilenumbruch AWT, Swing, JavaFX & SWT 2
TheWhiteShadow Swing Document Text Position in Pixel AWT, Swing, JavaFX & SWT 2
J Swing Text kürzendes JLabel AWT, Swing, JavaFX & SWT 12
J Swing TextArea mit nicht-editierbarem Text AWT, Swing, JavaFX & SWT 7
P Text in JPanel hinzufügen AWT, Swing, JavaFX & SWT 2
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben