Toolbar wie in MacOS?

Status
Nicht offen für weitere Antworten.

masta // thomas

Bekanntes Mitglied
Hey,

weiß einer von euch, ob es evtl. schon eine fertige Toolbar gibt, wie die folgende?

BubbleBar.gif


Danke
Thomas
 

masta // thomas

Bekanntes Mitglied
Nachbauen grundsätzlich sehr gern, ich hab es mir allerdings ohne Open GL vorgestellt - oder hab ich unaufmerksam gelesen?
 

AlArenal

Top Contributor
masta // thomas hat gesagt.:
Nachbauen grundsätzlich sehr gern, ich hab es mir allerdings ohne Open GL vorgestellt - oder hab ich unaufmerksam gelesen?

Ohne Open GL wäre doch unfair. Immerhin benutzt Apples Aqua auch Hardware-Beschleunigung :p
 

AlArenal

Top Contributor
thE_29 hat gesagt.:
Was nutzt java/java2d eigentlich? Oder wird im 2d Modus OpenGL/DX net benötigt?

Nutzt vermutlich jar nüscht außer den Grundfunktionen des jeweiligen OS. Linie ziehen, Fläche füllen, .. sind ja Standard-Ops jedes grafischen OS-Aufsatzes und so dürfte die Frage eher lauten: Wie setzt das OS den Kram in der Kommunikation mit dem Grafiktreiber um?

Da der S3 911 aber schon zu Zeiten von Windows 3.1 als erster Chip Hardwarebeschleunigung für 2D bot, wirds wohl im Normalfall auf jeden Fall auf eine Art von Beschleunigung hinauslaufen.
 

thE_29

Top Contributor
Naja, man kann mit normalen Java auch 3d Objekte erzeugen lassen ;)
Habe sogar ein Programm von nem Freund, welches das macht mit Matrizenrechnung usw..

Nur wenn man die Flächen ausfüllen lässt, dann wird das bisi zach ;) (Vorallem wenn man dann es noch drehen will)
 

AlArenal

Top Contributor
thE_29 hat gesagt.:
Naja, man kann mit normalen Java auch 3d Objekte erzeugen lassen ;)

Sicher. Man kann sich auch nen Web Application Server in Assembler stricken :)

Habe sogar ein Programm von nem Freund, welches das macht mit Matrizenrechnung usw..

Nur wenn man die Flächen ausfüllen lässt, dann wird das bisi zach ;) (Vorallem wenn man dann es noch drehen will)

Schon klar, dass man das alles in Software machen kann. Aber man möchte ja nicht den Rechner mit so einer Spielerei in die Knie zwingen und stundenlang langsamen Driss implementieren, der auch von der Hardware in einem Bruchteil der Laufzeit erledigt werden könnte.

So wie die, ich glaube von der FH Aachen, die Raytracing über neue Algos in Hardware (anfangs als durch FPGALs) erledigen lassen. Habe seitdem aber nüscht mehr von denen gehört: http://www.golem.de/0406/31631.html
 
R

Roar

Gast
java2d wird unter windows über directx beschleunigt, alternativ dazu gibs auch ne opengl pipeline, die is aber per default aus.
 

kaie

Bekanntes Mitglied
Um mal wieder auf das eigentlich Thema zurückzukommen: hier ist eine Java-Lösung nur mit Java2D. Ist nur mal eben so hingeschmiert, scheint aber zu funktionieren. Kommentare sind willkommen.
Code:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;

import javax.imageio.*;
import javax.swing.*;

public class MacToolbar extends JPanel implements Runnable,
        MouseMotionListener, MouseListener
{
    //-------------------------------------------------------------------------
    // Attribute
    //-------------------------------------------------------------------------
    private Vector<MacBefehl> befehle    = new Vector<MacBefehl>();
    private int               minGroesse = 40;
    private int               maxGroesse = 80;
    private int               abstand    = 2;
    private MacBefehl         auswahl    = null;

    //-------------------------------------------------------------------------
    // Konstruktor
    //-------------------------------------------------------------------------
    public MacToolbar()
    {
        setPreferredSize(new Dimension(500, 100));
        new Thread(this).start();
        addMouseListener(this);
        addMouseMotionListener(this);
        setOpaque(false);
        setBackground(new Color(50,70,255));
        setFont(new Font("Verdana",Font.BOLD,12));
    }

    public void neuerBefehl(String url, String text)
    {
        befehle.add(new MacBefehl(url, text));
    }

    public void paintComponent(Graphics g2)
    {
        super.paintComponent(g2);
        Graphics2D g = (Graphics2D) g2;

        int w = getSize().width;
        int h = getSize().height;
        
        g.setColor(getBackground());
        g.fillRect(0,h-2*abstand-minGroesse,w,2*abstand+minGroesse);

        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BICUBIC);
        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

        double gesamtbreite = -abstand;
        for (MacBefehl b : befehle)
        {
            gesamtbreite += b.groesse + abstand;
        }

        int pos = (int) (w / 2 - gesamtbreite / 2);
        for (MacBefehl b : befehle)
        {
            g.drawImage(b.bild, pos, (int) (h - abstand - b.groesse),
                    (int) b.groesse, (int) b.groesse, null);
            pos += abstand + b.groesse;
            if (b == auswahl)
            {
                g.setColor(getForeground());
                g.drawString(b.text, (int) (pos - b.groesse / 2 - g
                        .getFontMetrics().stringWidth(b.text) / 2), (int) (h
                        - abstand -5 - b.groesse));
            }
        }
    }

    public void run()
    {
        while (true)
        {
            try
            {
                Thread.sleep(100);
            } catch (Exception e)
            {
            }
            for (MacBefehl b : befehle)
            {
                b.groesse += (b.sollgroesse - b.groesse) / 4;
            }
            repaint();
        }
    }

    public void mouseMoved(MouseEvent me)
    {
        int x = me.getX();
        double gesamtbreite = -abstand;
        for (MacBefehl b : befehle)
        {
            gesamtbreite += b.groesse + abstand;
        }
        auswahl = null;
        int pos = (int) (getSize().width / 2 - gesamtbreite / 2);
        for (MacBefehl b : befehle)
        {
            b.sollgroesse = Math.max(minGroesse, maxGroesse
                    - Math.pow((pos + b.groesse / 2 - x) / 5, 2));
            if (b.sollgroesse > maxGroesse - 10)
                auswahl = b;
            pos += abstand + b.groesse;
        }
    }

    public void mouseEntered(MouseEvent me)
    {
    }

    public void mouseExited(MouseEvent me)
    {
        auswahl=null;
        for( MacBefehl b : befehle )
            b.sollgroesse=minGroesse;
    }

    public void mouseClicked(MouseEvent me)
    {
        if( auswahl!=null )
        {
            System.out.println( auswahl.text+" wurde gewählt");
            auswahl=null;
            for( MacBefehl b : befehle )
                b.sollgroesse=minGroesse;
        }
    }


    public void mousePressed(MouseEvent me)
    {
    }

    public void mouseReleased(MouseEvent me)
    {
    }

    public void mouseDragged(MouseEvent me)
    {
    }

    public static void main(String[] args)
    {
        JFrame f = new JFrame("Beispiel für eine Mac-Toolbar");

        MacToolbar m = new MacToolbar();
        m.setPreferredSize(new Dimension(800, 150));

        m.neuerBefehl(
                "http://lesliefranke.com/files/firefoxyourway/images/firefox.png",
                "Firefox");
        m.neuerBefehl(
                "http://img.search.com/thumb/5/52/OpenOffice.org_2_icon.png/48px-OpenOffice.org_2_icon.png",
                "OpenOffice");
        m.neuerBefehl(
                "http://poczta.most.org.pl/ustawienia/opera.png",
                "Opera");
        f.add(m, "South");
        f.setSize(800, 600);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private class MacBefehl
    {
        public String url;
        public String text;
        public Image  bild;
        public double groesse     = minGroesse;
        public double position    = 0;
        public double sollgroesse = minGroesse;

        public MacBefehl(String url, String text)
        {
            this.url = url;
            this.text = text;
            try
            {
                this.bild = ImageIO.read(new URL(url));
            } catch (Exception e)
            {
                System.out.println("Befehl '" + text
                        + "' konnte nicht geladen werden");
            }
        }
    }
}
 

masta // thomas

Bekanntes Mitglied
kaie: seeeehr cool, vielen Dank :) damit werde ich erstmal weiterarbeiten!

Roar: danke für die Links :) sieht sehr gut aus! Evtl. werde ich darauf zurückgreifen, macht einen guten Eindruck!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Aufklappbares Panel in Toolbar AWT, Swing, JavaFX & SWT 6
J Suche nach einer horizontal aufklappbaren Toolbar AWT, Swing, JavaFX & SWT 1
E JavaFX MenuBar und ToolBar zu einem Bereich AWT, Swing, JavaFX & SWT 3
T JavaFX Toolbar resizable AWT, Swing, JavaFX & SWT 4
dzim Toolbar - Problem bei enable/disable von Buttons AWT, Swing, JavaFX & SWT 6
I Toolbar AWT, Swing, JavaFX & SWT 27
A AWT Java Toolbar AWT, Swing, JavaFX & SWT 6
P SWT Toolbar mit nur einer Schaltfläche und einem Textfeld AWT, Swing, JavaFX & SWT 2
B Applet Button oder Toolbar in einem Applet AWT, Swing, JavaFX & SWT 5
C Swing Toolbar zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 5
padde479 Suche eine Komponente (->ToolBar) AWT, Swing, JavaFX & SWT 7
S SWT perspektive mit toolbar oder eventkomponente AWT, Swing, JavaFX & SWT 3
B Buttons in Toolbar einbinden AWT, Swing, JavaFX & SWT 6
S SWT ToolBar Buttons mit Text und Bild AWT, Swing, JavaFX & SWT 15
C Swing Andocken einer ToolBar verhindern AWT, Swing, JavaFX & SWT 3
S Dropdown-Menü wie auf der Eclipse-Toolbar AWT, Swing, JavaFX & SWT 7
G Verliere Referenz von Toolbar bei mehreren Fenster AWT, Swing, JavaFX & SWT 3
W SWING - Aktionen in Toolbar hinzufügen AWT, Swing, JavaFX & SWT 2
B Toolbar, Toolbar In Toolbar, alterna zu JToolbar AWT, Swing, JavaFX & SWT 3
G SWT Toolbar: Toolitem entfernen und wieder hinzufügen AWT, Swing, JavaFX & SWT 16
S ToolBar in GridbagLayout AWT, Swing, JavaFX & SWT 5
S Toolbar wie im Explorer? oder mozilla erstellen AWT, Swing, JavaFX & SWT 5
S Tooltip auf Toolbar-Icon AWT, Swing, JavaFX & SWT 6
G Toolbar AWT, Swing, JavaFX & SWT 5
B PNG-Icons in Toolbar einbinden AWT, Swing, JavaFX & SWT 3
G Abstand zwischen den Buttons in einer Toolbar AWT, Swing, JavaFX & SWT 3
M Toolbar Layout AWT, Swing, JavaFX & SWT 7
K Desktop toolbar Problem AWT, Swing, JavaFX & SWT 2
G Toolbar hat zuviel zwischenraum AWT, Swing, JavaFX & SWT 2
B Toolbar und Java-Versionen AWT, Swing, JavaFX & SWT 6
W ToolBar und StandardButtons AWT, Swing, JavaFX & SWT 9
S toolbar - flowlayout problem AWT, Swing, JavaFX & SWT 5
S Toolbar in einem BorderLayout verschieben AWT, Swing, JavaFX & SWT 4
G Toolbar mit Toolbuttons AWT, Swing, JavaFX & SWT 7
J Separator zwischen den einzelnen Symbolen in der Toolbar AWT, Swing, JavaFX & SWT 4
javasdann Icon in Toolbar ändern. AWT, Swing, JavaFX & SWT 4
javasdann MDI Problem mit Toolbar und Statusleiste. AWT, Swing, JavaFX & SWT 2
J Drop-down menü in Toolbar Button AWT, Swing, JavaFX & SWT 8
K toolbar dynamisch erzeugen AWT, Swing, JavaFX & SWT 2
A Bestes Layout für die Toolbar AWT, Swing, JavaFX & SWT 7
L Swing: Toolbar-Problem AWT, Swing, JavaFX & SWT 3
B Zugriff von Toolbar auf zugehörigen Frame AWT, Swing, JavaFX & SWT 6
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
komplettlost Vollbildmodus für MacOs Nutzer geht nicht AWT, Swing, JavaFX & SWT 13
O Problem mit der MacOS Version von Java AWT, Swing, JavaFX & SWT 2
M JTextField + MacOS und Copy & Paste? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben