Große Java-Swing JToggleButtons haben falsche Farbe

  • Ersteller MatrixJumper
  • Erstellt am

MatrixJumper

Gast
Hallo zusammen,

ich schreibe grad mit Java Swing an einer GUI, in der ich unter anderem ein Paar JToggleButtons benutze. Die sollen nun aus verschiedenen gründen nicht die normale Form haben, sondern etwas höher und damit auch rechteckiger sein (für die rechteckige Form gibts bei Aqua-Look&Feel ja keine andere Möglichkeit als sie größer zu machen, oder?).
Nun musste ich feststellen, dass Die Buttons dann aber beim togglen nicht mehr blau werden sondern stattdessen grau. Kennt jemand eine Möglichkeit sie wieder blau zu bekommen?

Danke für Ideen! :)

p.s. Noch eine eher philosophische Frage (glaub ich): Was haltet ihr beim GUI-programmieren für besser? Die Widgets als Attribute meiner Klasse zu benutzen, oder von ihnen zu erben? Also

Code:
public class programm {
    private JFrame f = new JFrame(); 
    ...
}
oder doch lieber
Code:
public class programm extends JFrame {
    ...
}
 

Thof

Gast
zeig mal ein Beispiel, was du an den JToggleButtons angestellt hast ;)

bzgl. der Frage zum "Aufbau" und zur Struktur deines Programms:
Es gibt verschiedene Möglichkeiten und Argumente. Im Normalfall ist aber die einfacherer / praktischerer Variante, von JFrame zu erben (extends JFrame).

Gruß,
Tom
 

MatrixJumper

Gast
Oh klar, sorry, hier mal der Code-Schnippsel (im Moment sind das natürlich nur Dummy-Buttons, ich bin noch dabei das Design festzulegen bevor ich anfange wirkliche Funktion zu implementieren)
Code:
JPanel buttonP = new JPanel();
buttonP.setLayout(new BoxLayout(listPanel, BoxLayout.X_AXIS));
buttonP.setBorder(BorderFactory.createEmptyBorder(25, 15, 10, 10));
for (int i = 1; i <= 5; i++) {
	JToggleButton jToggleButton = new JToggleButton("Selection " + i);
	jToggleButton.setPreferredSize(new Dimension(90, 50));	jToggleButton.setMinimumSize(new Dimension(50, 50));
	jToggleButton.setMaximumSize(new Dimension(250, 50));
	buttonP.add(jToggleButton);
}

Der Effekt tritt nicht auf, wenn ich das Minimum für die Größe weglasse, weil dann ignoriert er die Höhenangabe der PreferredSize und setzt die Höhe auf Standard. Und schon sind getoggelte Buttons brav blau.

-----------------------

Bei der Sache mit dem Erben... ich find das Erben sieht in dem Zusammenhang irgendwie ein bisschen nach dirty hack aus, andererseits kann man dann natürlich die GUI ganz einfach auf mehrere Klassen (und damit Dateien) verteilen indem man zum Bsp die Menüleiste in ne eigene Klasse auslagert, die von JMenuBar erbt.
 
Zuletzt bearbeitet von einem Moderator:

JMR

Granny Smith
Registriert
17.04.07
Beiträge
12
Welches LookAndFeel verwendest Du? Davon kann es nämlich auch abhängen, was mit Deinen Grössenangaben gemacht wird. Unter nicht Mac LookAndFeels wird bei einem BoxLayout sehr wohl die Höhenangabe in der preferredSize beachtet. So weit ich das noch im Kopf habe, nimmt er bei einer horizontalen Box die grösste Höhe der preferred Sizes der enthaltenen Elemente und macht sie alle so gross, die Breiten werden alle respektiert.

Ich glaube aber, ich habe in der Apple Java Dokue gelesen, dass unter dem Mac LookAndFeel die alle GUI Elemente von den Grössen an den Apple StyleGuide angepasst sind, und daher normalerweise nicht grösser werden (ausser man scheint sie so zu zwingen, wie Du das versucht hast). Ich fürchte, da hast Du auf dem Mac schlechte Karten. Warum sollen die Denn höher werden?
 

MatrixJumper

Gast
Irgendwie hab ich sowas in der Art befürchtet...

Nun, warum sollen sie größer werden ... ich versuche optisch eine Art TabbedPane nachzubauen wie sie in Windows aussieht ... grundsätzlich dürfte es eigentlich auch die TabbedPane von OS X sein ... ABER und das ist das Problem, man muss mehrere Tabs gleichzeitig auswählen können. Die zugehörigen Inhalte werden dann in geeigneter weise "gemischt"... da ich aber nicht wirklich eine Idee hab, wie ich das originale TabbedPane dementsprechend verändern könnte, war die idee, mit vergrößerten Buttons, so dass sie auch rechteckig werden, die Registerkarten von Windows nachzubauen... aber eben mit ToggleButtuns, so dass ich problemlos beliebig viele gleichzeitig auswählen kann.

Dazu kommt noch, dass ich die Tabs an zwei Seiten des Panes brauche nicht nur an einer, wie es normale TabbedPanes erlauben.

Ich hoffe das war einigermaßen verständlich. :eek:

Edit: Ich habs so eingestellt dass jeweils das native Look&Feel benutzt wird.
 
Zuletzt bearbeitet von einem Moderator: