JProgressBar übereinander legen?

Status
Nicht offen für weitere Antworten.

MikeThomson

Mitglied
Hallo,

kann man zwei JProgressBar übereinander legen?

Hintergrund ist folgender. Bei einer Prüfungsroutine müssen mindestens
die ersten 80% durchlaufen. Ich würde diese gerne in der Progressbar rot färben. Die letzten 20% sind optional. Daher würde ich die letzten 20% des Balkens grün färben wollen. Da ich (zumindest nich das ich wüsste) der Progressbar zwei Farben verpassen kann, dachte ich mir ich leg beide übereinander.

Geht das? Oder hat jemand eine andere Lösung?
 

Ebenius

Top Contributor
kann man zwei JProgressBar übereinander legen?
Das ist normaler Weise nicht hübsch. Nebeneinander ginge da schon eher. Oder Du trickst das UI aus, so würde ich's machen. Eine (ausführbare) Beispielimplementation. Die Main()-Methode würde man natürlich nach dem Spielen löschen: [HIGHLIGHT="Java"]import java.awt.Color;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/**
* An enhanced progress bar, painting the bar content with an alternative
* color from a given threshold value. Note that the threshold calculation is
* based on the bare idea that the UI distributes the values uniformly in the
* whole content area (the component size without the insets).
*
* @author Ebenius
*/
public class JXProgressBar extends JProgressBar {

// -------------------------------------------------------------------------
// Instance fields
// -------------------------------------------------------------------------

private transient volatile boolean paintingAlternativeForeground;
private float alternativeThreshold = 0.5f;
private Color alternativeForeground = null;

// -------------------------------------------------------------------------
// Overridden methods for alternative paint support
// -------------------------------------------------------------------------

@Override
public Color getForeground() {
return paintingAlternativeForeground ? getAlternativeForeground() : super
.getForeground();
}

@Override
protected void paintComponent(Graphics g) {
if (alternativeForeground == null) {
super.paintComponent(g);
} else if (ui != null) {
Graphics scratchGraphics = (g == null) ? null : g.create();
try {

ui.update(scratchGraphics, this);

/* clip graphics for alternative painting */
final Insets ins = getInsets();
final int w = getWidth();
final int h = getHeight();
switch (getOrientation()) {
case SwingConstants.VERTICAL:
final int offset =
(int) ((h - ins.top - ins.bottom) * alternativeThreshold);
ins.top += offset;
break;
case SwingConstants.HORIZONTAL:
default:
if (getComponentOrientation().isLeftToRight()) {
ins.left += (w - ins.left - ins.right) * alternativeThreshold;
} else {
ins.right += (w - ins.left - ins.right) * alternativeThreshold;
}
break;

}

final int wNet = w - ins.left - ins.right;
final int hNet = h - ins.top - ins.bottom;
scratchGraphics.setClip(ins.left, ins.top, wNet, hNet);

/* paint the alternative part clipped */
try {
paintingAlternativeForeground = true;
ui.paint(scratchGraphics, this);
} finally {
paintingAlternativeForeground = false;
}
} finally {
scratchGraphics.dispose();
}
}
}

// -------------------------------------------------------------------------
// Bean getters and setters
// -------------------------------------------------------------------------

/**
* Get the foreground color used for values above the adjusted threshold
* value. If this color is {@code null}, alternative color paining is
* disabled. By default the value is {@code null}.
*
* @return the alternative foreground color – possibly {@code null}
*/
public Color getAlternativeForeground() {
return alternativeForeground;
}

/**
* Set the foreground color used for values above the adjusted threshold
* value. If this color is {@code null}, alternative color paining is
* disabled. By default the value is {@code null}.
*
* @param fg the alternative foreground color – possibly {@code null}
*/
public void setAlternativeForeground(Color fg) {
final Color old = this.alternativeForeground;
this.alternativeForeground = fg;
firePropertyChange("alternativeForeground", old, fg); //$NON-NLS-1$
}

/**
* Returns the threshold for the alternative color painting. This threshold
* is guaranteed to be a {@code float} number between {@code 0.f} and
* {@code 1.f} (both inclusive). By default the value is {@code 0.5f}.
*
* @return the threshold
*/
public float getAlternativeThreshold() {
return alternativeThreshold;
}

/**
* Sets the threshold for the alternative color painting. This threshold is
* a {@code float} number between {@code 0.f} and {@code 1.f} (both
* inclusive). If the bounds are violated, an
* {@link IllegalArgumentException} is thrown. By default the value is
* {@code 0.5f}.
*
* @param value the threshold to set
* @throws IllegalArgumentException if {@code value} is out of bounds
*/
public void setAlternativeThreshold(float value) {
if (value < 0.f || value > 1.f || Float.isNaN(value)) {
throw new IllegalArgumentException("value: " //$NON-NLS-1$
+ value
+ " is not in bounds [0.f,1.f]"); //$NON-NLS-1$
}

final float old = this.alternativeThreshold;
this.alternativeThreshold = value;
firePropertyChange("alternativeThreshold", old, value); //$NON-NLS-1$
}

// -------------------------------------------------------------------------
// Program Entry Point
// -------------------------------------------------------------------------

/**
* Test main method.
*
* @param args ignored
*/
public static void main(String[] args) {
/* progress bar */
final JXProgressBar bar = new JXProgressBar();
bar.setMinimum(0);
bar.setMaximum(100);
bar.setStringPainted(true);
bar.setString("Running"); //$NON-NLS-1$
bar.setAlternativeForeground(new Color(220, 117, 119));
bar.setAlternativeThreshold(0.45f);
// bar.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);

/* timer */
final Timer timer = new Timer(20, new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
final int n = bar.getValue() + 1;
if (n > bar.getMaximum()) {
((Timer) e.getSource()).stop();
bar.setString("Done"); //$NON-NLS-1$
return;
}
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
bar.setValue(n);
}
});
}
});
timer.setRepeats(true);
timer.setCoalesce(true);
timer.start();

/* frame */
final JFrame f = new JFrame("Progress Bar Fun");
f.setContentPane(new JScrollPane(bar));
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
}
}[/HIGHLIGHT]

Ebenius
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Achtung! Durch einen Fehler im Syntaxhighlighting wird an die Definition eines Arrays ein Semikolon angehängt.

Im obigen Beispiel wurde daher leider in der main()-Methode ein Semikolon an das String[] angehängt.

Der Fehler wird repariert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Rekursive Methode JProgressBar AWT, Swing, JavaFX & SWT 4
T JProgressbar während actionListener updaten AWT, Swing, JavaFX & SWT 1
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
A Swing JProgressbar im Windows Look & Feel Farbanpassung AWT, Swing, JavaFX & SWT 2
G JProgressBar: Verständnis Problem AWT, Swing, JavaFX & SWT 3
S Swing JProgressBar läuft nicht mit AWT, Swing, JavaFX & SWT 12
T Swing JProgressBar mit String unschön AWT, Swing, JavaFX & SWT 5
H jprogressbar während datenabfrage anzeigen AWT, Swing, JavaFX & SWT 5
P Problem Thread.sleep() und JProgressBar AWT, Swing, JavaFX & SWT 7
E Swing JProgressBar updaten AWT, Swing, JavaFX & SWT 3
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
V Swing JProgressBar aktualisieren AWT, Swing, JavaFX & SWT 14
M JProgressBar updatet nicht AWT, Swing, JavaFX & SWT 4
T Swing JProgressBar Indeterminate bleibt stehen bei neuem Fenster AWT, Swing, JavaFX & SWT 6
A JProgressBar updaten abhängig vom Output eines externen Skripts AWT, Swing, JavaFX & SWT 2
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
J JProgressBar Indeterminate AWT, Swing, JavaFX & SWT 17
J JProgressBar Farbverlauf AWT, Swing, JavaFX & SWT 2
O Probleme mit JProgressBar bei der Statusanzeige AWT, Swing, JavaFX & SWT 5
S jProgressbar von einem Download AWT, Swing, JavaFX & SWT 6
C Swing JProgressBar in JDialog wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
S Swing StatusLeiste mit JProgressBar AWT, Swing, JavaFX & SWT 4
S JProgressBar in Abhängigkeit eines FileInputStreams AWT, Swing, JavaFX & SWT 2
S (Applets) JProgressBar wird erst am Ende angezeigt AWT, Swing, JavaFX & SWT 13
S Problem mit JProgressBar AWT, Swing, JavaFX & SWT 3
E Swing DB Zugriff mit JProgressBar?! AWT, Swing, JavaFX & SWT 8
C Swing JProgressBar Aktualisiert sich nicht. AWT, Swing, JavaFX & SWT 9
M JProgressBar Look and Feel AWT, Swing, JavaFX & SWT 5
C JProgressBar und JLabel AWT, Swing, JavaFX & SWT 5
K JProgressBar transparent AWT, Swing, JavaFX & SWT 10
M JProgressBar AWT, Swing, JavaFX & SWT 2
K JProgressBar für Serialisierung AWT, Swing, JavaFX & SWT 6
multiholle [JProgressBar] Raster deaktivieren AWT, Swing, JavaFX & SWT 14
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
G JProgressBar actionPerformedMethode und SwingUI thread AWT, Swing, JavaFX & SWT 36
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Repaint bei JProgressBar AWT, Swing, JavaFX & SWT 3
A Richtiger Umgang mit jProgressBar AWT, Swing, JavaFX & SWT 2
H JProgressBar in TableColumn von JTable setzen/abfragen AWT, Swing, JavaFX & SWT 5
B JProgressBar: wie muss ich das lösen? AWT, Swing, JavaFX & SWT 4
R JProgressBar-Verhalten AWT, Swing, JavaFX & SWT 5
G JProgressbar AWT, Swing, JavaFX & SWT 8
A JProgressBar: Farbe im Windows Look&Feel ändern. AWT, Swing, JavaFX & SWT 1
C JProgressBar und ihre Tücken AWT, Swing, JavaFX & SWT 8
G JProgressBar in JTable AWT, Swing, JavaFX & SWT 6
G Probleme mit JProgressbar auf JPanel in JFrame AWT, Swing, JavaFX & SWT 6
F JProgressBar und NullPointerException AWT, Swing, JavaFX & SWT 4
T JProgressBar und CMP Bean AWT, Swing, JavaFX & SWT 2
J JProgressBar flackert AWT, Swing, JavaFX & SWT 14
S JProgressBar zu JOptionPane hinzufügen. AWT, Swing, JavaFX & SWT 8
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
L JProgressbar möglichst genau AWT, Swing, JavaFX & SWT 3
G JProgressBar + Thread + Client AWT, Swing, JavaFX & SWT 10
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JProgressBar String anzeigen, danach wieder normale Ansicht AWT, Swing, JavaFX & SWT 3
G JProgressBar AWT, Swing, JavaFX & SWT 8
L JProgressBar wird nicht mehr aktualisiert AWT, Swing, JavaFX & SWT 2
U JProgressBar in umgekehrter Richtung AWT, Swing, JavaFX & SWT 2
S JProgressBar einbinden AWT, Swing, JavaFX & SWT 5
H JProgressBar AWT, Swing, JavaFX & SWT 6
T JProgressBar und JPG AWT, Swing, JavaFX & SWT 2
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7
CptK JPanels übereinander legen AWT, Swing, JavaFX & SWT 6
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
M Java FX Layouts übereinander statt nebeneinander AWT, Swing, JavaFX & SWT 4
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
F Swing JPanels übereinander ohne Mananger AWT, Swing, JavaFX & SWT 1
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
T Prüfen ob 2 JLabel übereinander liegen. Performance Problem. AWT, Swing, JavaFX & SWT 5
S 2 Canvas übereinander AWT, Swing, JavaFX & SWT 2
J Swing Componenten übereinander platzieren. AWT, Swing, JavaFX & SWT 17
M 2D-Grafik Mehrere Linien (nacheinander) übereinander Zeichnen AWT, Swing, JavaFX & SWT 6
M Swing JPanel lagern übereinander AWT, Swing, JavaFX & SWT 14
C Swing JPanel übereinander legen AWT, Swing, JavaFX & SWT 4
C Zwei Bilder übereinander legen AWT, Swing, JavaFX & SWT 1
S Graphics2D: Transparent übereinander zeichnen AWT, Swing, JavaFX & SWT 7
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
J LayoutManager Panels übereinander AWT, Swing, JavaFX & SWT 3
D Texte zeichenweise übereinander darstellen, gemeinsam umbrechen AWT, Swing, JavaFX & SWT 5
I 2 Panels übereinander, 1 transparent AWT, Swing, JavaFX & SWT 2
S mehere panels übereinander AWT, Swing, JavaFX & SWT 2
Y Mehrere Komponenten übereinander ohne Swing AWT, Swing, JavaFX & SWT 2
B Komponenten übereinander platzieren AWT, Swing, JavaFX & SWT 2
S Labels und Button übereinander --> Reihenfolge? AWT, Swing, JavaFX & SWT 4
F JPanel übereinander zeichnen AWT, Swing, JavaFX & SWT 4
W Bilder übereinander legen AWT, Swing, JavaFX & SWT 1
N Mehrere JComponents übereinander AWT, Swing, JavaFX & SWT 3
H Komponenten übereinander anordnen, I/O-Konsole AWT, Swing, JavaFX & SWT 3
E Panels übereinander darstellen AWT, Swing, JavaFX & SWT 2
D 2 Komponenten übereinander AWT, Swing, JavaFX & SWT 2
S Komponenten übereinander anordnen? AWT, Swing, JavaFX & SWT 5
P JLabels übereinander legen AWT, Swing, JavaFX & SWT 8
M JTabbedPane zeigt alle Panels übereinander an :( AWT, Swing, JavaFX & SWT 8
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
K Swing JPanel ueber komplette Form legen AWT, Swing, JavaFX & SWT 1
D Swing Text auf Bild legen AWT, Swing, JavaFX & SWT 7
K SWT Mehrere Einträge ins Clipboard legen AWT, Swing, JavaFX & SWT 2
M Hover-Farbe über Hintergrundfarbe legen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben