Probleme mit Tabbed Pane
Sensei
- java
Hi!
Is zwar jetzt nicht direkt zu Webdesign aber ihr helft ja auch bei anderen Dingen meist sehr kompetent!
Habe für eine einfache GUI ein TabbedPane mit 5 Tabs erstellt. Mein Problem: wenn ich das Programm laufen lasse, kann ich zwar alles bedienen, allerdings ist
grml.
Wisst ihr was mein fehler sein könnte um zu so einer komischen anzeige zu kommen [1.) is schätz ich mal normal, aber 2.)?!?]?
Hier mein Code (der die Tabs betrifft):
--------------------------------------------------------------------
[...]
private JTabbedPane jTabbedPane = null;
private JPanel startPanel = null;
private JPanel ticketPanel = null;
private JPanel userPanel = null;
private JPanel filmePanel = null;
private JPanel personenPanel = null;
[...]
private JTabbedPane getJTabbedPane() {
if(jTabbedPane == null) {
jTabbedPane = new JTabbedPane();
jTabbedPane.addTab("", new ImageIcon(getClass().getResource("/gui/start.png")), getStartPanel(), null);
jTabbedPane.addTab("", new ImageIcon(getClass().getResource("/gui/tickets.png")), getTicketPanel(), null);
jTabbedPane.addTab("", new ImageIcon(getClass().getResource("/gui/user.png")), getUserPanel(), null);
jTabbedPane.addTab("", new ImageIcon(getClass().getResource("/gui/filme.png")), getFilmePanel(), null);
jTabbedPane.addTab("", new ImageIcon(getClass().getResource("/gui/personen.png")), getPersonenPanel(), null);
jTabbedPane.setTabPlacement(JTabbedPane.TOP);
}
return jTabbedPane;
}
[...]
---------------------------------------------------------------------
Habts ihr Vorschläge?
Die missratene GUI könnt ihr euch unten anschauen!
cu & thx, Sensei
Hallo,
- der hintergrund hinter den tabs halb weiß/grau ==> pfui
- sobald ich auf einen anderen tab gehe wird der hintergrund noch komischer mit grafik-fetzen aus der applikation.
Ich spekuliere jetzt einfach mal:
Das ganze sieht fast so aus, als wäre dein ContentPane (oder die
Komponente, in der sich der TabbedPane befindet) nicht opaque. Wenn er
nicht opaque ist, wird es nicht gezeichnet, als bleiben alte
Bildschirminhalte an Stellen, an der sich keine Komponente befindet,
einfach stehen. (Die Darstellung ist an der Stelle undefiniert.)
Versuch mal dein ContentPane (oder die Komponente, in der sich der
TabbedPane befindet) mit dem Aufruf von "setOpaque(true)" auf
undurchsichtig zu schalten. Vermutlich geht's dann schon.
(Wie ich gerade sehe, wird der ContentPane im TabbedPane-Tutorials von
Sun auch explizit auf undurchsichtig gesetzt:
http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/TabbedPaneDemo.java)
Gruß
Slyh
Danke für die Hilfe!
Schaut jetzt VIEL besser aus; zumindest problem 2) is damit gelöst. der hintergrund von den tabs ist jetzt auch nicht mehr weiß, allerdings dunkelgrau (selbes grau wie bei nicht-aktiven Tabs).
Lieber wäre mir hellgrau - wenn du noch einen Tipp hast..?! Aber sonst auch egal, passt schon.
Und weil du dich so gut auskennst gleich noch eine Frage. Habe noch ein Problem mit Buttons.
Und zwar habe ich 3 Buttons: "Neu..." "Ändern..." "Löschen..."
Diese setze ich mit
myButton.setPreferredSize(new java.awt.Dimension(85,25));
auf eine Bestimmte Größe.
Das klappt bei allen, nur nicht beim "Neu..." Button. Dabei ist er VÖLLIG ident angelegt wie Ändern und Löschen!
Liegts ev. daran, dass "Neu..." nicht soviele Buchstaben hat wie "Ändern..."?! Aber die Buttongröße müsste ich doch trotzdem beliebig wählen können?
Die Buttons habe ich übrigens in einem Box-Y-Layout Panel eingebunden, dessen Breite ich mit 90 angegeben habe.
Also Danke falls du dazu noch was weißt bzw. zu meinem grau Problem, hast mir schon sehr viel geholfen, cu, Sensei
Hallo,
Schaut jetzt VIEL besser aus; zumindest problem 2) is damit gelöst. der hintergrund von den tabs ist jetzt auch nicht mehr weiß, allerdings dunkelgrau (selbes grau wie bei nicht-aktiven Tabs).
Lieber wäre mir hellgrau - wenn du noch einen Tipp hast..?! Aber sonst auch egal, passt schon.
Der ContentPane ist ein Container. Und der hat eine Methode
setBackground().
Ich würde aber davon abraten, einfach blind irgendwelche Farben
fest zu setzen, da du nicht weißt welches Farbschema der Benutzer
verwendet oder wie sich die Look&Feels in Java weiterentwickeln
werden. (Das Crossplatform-L&F, das du ja verwendest, sieht in
Java 1.5 bspw. ganz anders aus...)
Besser wäre wohl, wenn du dir eine passende Farbe aus dem UIManager
(Package "javax.swing") holst. Der hat eine Methode "getColor", der
du als Parameter einen der generischen Farbnamen mitgibst.
Diese mögliche Farbnamen kannst du über die UIDefault-Klasse
ermitteln. Die ist von Hashtable abgeleitet, du kannst also alle
möglichen Keys ermitteln. Die UIDefault-Klasse erhälst du durch
Aufruf der Methode "UIManager.getDefaults()".
Das Java-Buch deiner Wahl wird dir die Hintergründe genauer erklären
können.
Diese setze ich mit
myButton.setPreferredSize(new java.awt.Dimension(85,25));
Das solltest du nicht tun. Der Button weiß sehr genau, wie groß
er am liebsten wäre. Der verwendete Layoutmanager entscheidet dann,
wie groß der Button letztendlich wird.
(Die meisten Layoutmanager ignorieren die PreferredSize in vielen
Fällen sowieso...)
Liegts ev. daran, dass "Neu..." nicht soviele Buchstaben hat wie "Ändern..."?! Aber die Buttongröße müsste ich doch trotzdem beliebig wählen können?
Die Buttons habe ich übrigens in einem Box-Y-Layout Panel eingebunden, dessen Breite ich mit 90 angegeben habe.
Laut JavaDoc vom BoxLayout sollten alle Komponenten gleich groß --
nämlich so groß wie die größte Komponente -- gesetzt werden.
Vielleicht ist es keine gute Idee die Breite des Panels irgendwie
zu begrenzen. Wie gesagt, der Layoutmanager weiß schon, was er tun
sollte.
(Verwende immer Layoutmanager. Positioniere Komponenten nie absolut.)
Gruß
Slyh
Danke, werde mir die Dinge mal zu Herzen nehmen und versuchen, alles zu verstehen :-)
Vielen Dank für die Hilfe & ausführliche Erklärung!
cu, Sensei