# GUI verfärbt sich manchmal



## Kaffeebohne (18. Mai 2005)

Hallo

meine GUI verfärbt sich manchmal komischerweise:








Normalerweise sollte Proxyadress, Proxyport, Username, Password die selbe Farbe haben wie Use Authentification. Am manchmal hat es halt diese hellgrauere unterlegung.

Woher kann das kommen?


----------



## AlArenal (18. Mai 2005)

Screenshot?


----------



## Kaffeebohne (18. Mai 2005)

Musste grad noch das Photo hochladen, dachte das könnte man auch hier im Forum.


----------



## Roar (18. Mai 2005)

hm http://www.java-forum.org/de/viewtopic.php?t=5113 ?


----------



## Kaffeebohne (18. Mai 2005)

Komisch,

das einzige was heavyweight ist, ist der JDialog.

Der Rest ist alles Swing: JTextField, JLabel, JCheckBox, JPasswordField, JButton...


----------



## thE_29 (18. Mai 2005)

JDialog ist auch net heavyweight!

Dialog is heavyweight!!


Gib mal bisi Sourcecode um zu analysieren


----------



## Kaffeebohne (18. Mai 2005)

In dem Link steht aber:



> (Einzig JFrame, JDialog... sind ebenfalls heavyweight)



...egal.




```
/*
 * ProxyDialog.java
 *
 * Created on 3. Mai 2005, 13:33
 */

package gui;
import lib.*;
import tttool.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import tttool.Setup;


/**
 *
 */
public class ProxyDialog extends JDialog {
    

    private Language language;
    private Setup setup;
    
    private String loginUser;
    private String loginPassword;
    
    private JTextField jTextFieldProxyUrl;
    private JTextField jTextFieldProxyPort;
    private JTextField jTextFieldUser;
    private JPasswordField jPasswordFieldPass;
    
    private JLabel jLabelProxyUrl;
    private JLabel jLabelProxyPort;
    private JLabel jLabelUser;
    private JLabel jLabelPass;
    private JLabel jLabelProxyAuth;
    
    private JCheckBox jCheckBoxProxyAuth;
    private JCheckBox jCheckBoxProxyUse;
    
    private JButton jButtonAbort;
    private JButton jButtonOkay;
    
    boolean useProxyAuth = false;
    boolean useProxyUse  = false;
    
    
    /** Creates a new instance of ProxyDialog */
    public ProxyDialog(Setup setup, Language language, Frame owner, boolean modal) {
        super(owner, null, modal);
        this.setup = setup;
        this.language = language;
        initComponets();

    }
    
    
    private void initComponets() {
        setResizable(false);
        setLayout();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.GridLayout(6, 2));
        initVariables();
        addActionListeners();
        setTitles();
        addComponents();
        
    }
    
    private void setDialogToCenter() {
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        java.awt.Dimension dialogSize = getSize();
        setLocation((screenSize.width-dialogSize.width)/2,(screenSize.height-dialogSize.height)/2);
    }
    
    private void initVariables() {
        jTextFieldProxyUrl      = new JTextField();
        jTextFieldProxyPort     = new JTextField();
        jTextFieldUser          = new JTextField();
        jPasswordFieldPass      = new JPasswordField ();   
        
        jLabelProxyPort  = new JLabel();
        jLabelProxyUrl   = new JLabel();
        jLabelUser       = new JLabel();
        jLabelPass       = new JLabel();
        jLabelProxyAuth  = new JLabel();
        
        jCheckBoxProxyAuth = new JCheckBox();
        jCheckBoxProxyUse = new JCheckBox();
        
        jButtonAbort = new JButton();
        jButtonOkay  = new JButton();
    }
    
    private void setTitles() {
        setTitle(language.get("gui_proxydialog_title"));
        jLabelProxyUrl.setText(language.get("gui_proxydialog_label_proxy_url"));
        jLabelProxyPort.setText(language.get("gui_proxydialog_label_proxy_port"));
        jLabelUser.setText(language.get("gui_proxydialog_label_proxy_user"));
        jLabelPass.setText(language.get("gui_proxydialog_label_proxy_pass"));
        jButtonAbort.setText(language.get("gui_proxydialog_button_abort"));
        jButtonOkay.setText(language.get("gui_proxydialog_button_okay"));
        jCheckBoxProxyUse.setText(language.get("gui_proxydialog_checkbox_proxy_use"));
        jCheckBoxProxyAuth.setText(language.get("gui_proxydialog_checkbox_proxy_auth"));
    }
    
    private void addComponents() {
      
        getContentPane().add(jLabelProxyUrl);
        getContentPane().add(jTextFieldProxyUrl);
        getContentPane().add(jLabelProxyPort);
        getContentPane().add(jTextFieldProxyPort);
        getContentPane().add(jLabelUser);
        getContentPane().add(jTextFieldUser);
        getContentPane().add(jLabelPass);
        getContentPane().add(jPasswordFieldPass);
        getContentPane().add(jCheckBoxProxyUse);
        getContentPane().add(jCheckBoxProxyAuth);
//        getContentPane().add(jLabelProxyAuth);
        getContentPane().add(jButtonAbort);
        getContentPane().add(jButtonOkay);
        pack();
    }
    
    private void addActionListeners() {
        jButtonAbort.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                toogleOff();
            }
        });
        
        jButtonOkay.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                saveProperties();
                toogleOff();
            }
        });
        
        jCheckBoxProxyUse.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                jCheckBoxProxyUseAction();
            }
        });
        
        jCheckBoxProxyAuth.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                jCheckBoxProxyAuthAction();
            }
        });
    }
    
    private void jCheckBoxProxyUseAction() {
        if(useProxyUse) {
            useProxyUse = false;
        } else {
            useProxyUse = true;
        }
        toggleProxyUse();
    }
    
    
    private void jCheckBoxProxyAuthAction() {
        if(useProxyAuth) {
            useProxyAuth = false;
        } else {
            useProxyAuth = true;
        }
        toggleProxyAuth();
    }
    
    private void toogleOff() {
        setVisible(false);
    }
    
    public void showTheDialog() {
        refreshProperties();
        setDialogToCenter();
        setVisible(true);
    }
    
    private void saveProperties() {
        setup.setMainProperty("proxy", jTextFieldProxyUrl.getText());
        setup.setMainProperty("proxy_port", jTextFieldProxyPort.getText());
        setup.setMainProperty("proxy_user", jTextFieldUser.getText());
        setup.setMainProperty("proxy_pass", jPasswordFieldPass.getText());
        if(useProxyAuth) {
            setup.setMainProperty("proxy_auth", "1");
        } else {
            setup.setMainProperty("proxy_auth", "0");
        }
        if(useProxyUse) {
            setup.setMainProperty("proxy_use", "1");
        } else {
            setup.setMainProperty("proxy_use", "0");
        }
        setup.saveMainSetup();
    }
    
    private void refreshProperties() {
        jTextFieldProxyUrl.setText(setup.getMainPropertyAsString("proxy"));
        jTextFieldProxyPort.setText(setup.getMainPropertyAsString("proxy_port"));
        jTextFieldUser.setText(setup.getMainPropertyAsString("proxy_user"));
        jPasswordFieldPass.setText(setup.getMainPropertyAsString("proxy_pass"));
        setProxyUseCheckBox();
        setProxyAuthCheckBox();
    }
    
    private void toggleProxyUse() {
        if(useProxyUse) {
            enableProxyUseView();
        } else {
            disableProxyUseView();
        }
    }
    
    private void toggleProxyAuth() {
        if(useProxyAuth) {
            enableProxyAuthView();
        } else {
            disableProxyAuthView();
        }
    }
    
    private void enableProxyUseView() {
        jLabelProxyPort.setEnabled(true);
        jLabelProxyUrl.setEnabled(true);
        jTextFieldProxyPort.setEnabled(true);
        jTextFieldProxyUrl.setEnabled(true);
        jCheckBoxProxyAuth.setEnabled(true); 
    }
    
    private void disableProxyUseView() {
        jLabelProxyPort.setEnabled(false);
        jLabelProxyUrl.setEnabled(false);
        jTextFieldProxyPort.setEnabled(false);
        jTextFieldProxyUrl.setEnabled(false);
        jCheckBoxProxyAuth.setEnabled(false);
    }
    
    private void enableProxyAuthView() {
        jLabelUser.setEnabled(true);
        jLabelPass.setEnabled(true);
        jTextFieldUser.setEnabled(true);
        jPasswordFieldPass.setEnabled(true);
    }
    
    private void disableProxyAuthView() {
        jLabelUser.setEnabled(false);
        jLabelPass.setEnabled(false);
        jTextFieldUser.setEnabled(false);
        jPasswordFieldPass.setEnabled(false);
    }
    
    private void setProxyUseCheckBox() {
        if(setup.getMainPropertyAsInteger("proxy_use") == 1) {
//            System.out.println("Proxyuse yes");
            useProxyUse = true;
            jCheckBoxProxyUse.setSelected(true);
            enableProxyUseView();
            jCheckBoxProxyAuth.setEnabled(true);
        } else {
//            System.out.println("Proxyuse no");
            useProxyUse = false;
            disableProxyUseView();
            jCheckBoxProxyUse.setSelected(false);
            jCheckBoxProxyAuth.setEnabled(false);
        }
    }
    
    
    private void setProxyAuthCheckBox() {
        if(setup.getMainPropertyAsInteger("proxy_auth") == 1) {
//            System.out.println("Proxyauth yes");
            useProxyAuth = true;
            jCheckBoxProxyAuth.setSelected(true);
            enableProxyAuthView();
        } else {
//            System.out.println("Proxyauth no");
            useProxyAuth = false;
            disableProxyAuthView();
            jCheckBoxProxyAuth.setSelected(false);
        }
    }
    
    public void setLayout() {
       try{
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            System.out.println("Error: LF");
        }
    }
}
```

Lustigerweise ist kommt das verfärben nur dann zustande wenn ich es nicht aus Netbeans aus starte.


----------



## thE_29 (18. Mai 2005)

Mh, vielelicht isses halt doch heavyweight  (aber das is egal, weil es sowieso als Swing deklariert ist und es eigentlich nur um Überzeichnungsprobleme zwischen Swing und AWT geht)


Jedenfalls habe ich alles rausgenommen was er nicht erkannt hat und habs kompiliert!

Also bei mir passt eigentlich alles...


----------



## Kaffeebohne (19. Mai 2005)

Hast du es über die einen normalen Jar aufruf gemacht, oder direkt aus der Entwicklungsumgebung gestartet? Wie ich oben schon beschrieben habe tritt das Problem nur bei einem "händischen" starten auf.

Das verwirrt mich.


----------



## thE_29 (19. Mai 2005)

Also ich habs mit VisualSlick und javac,java gemacht, da mir das im JBuilder mit Projekt anlegen, etc zu blöd ist für 1 Klasse!

Vielleicht hast du ja 2 JDKs oben (1mal netbeans und 1e andere).

Und vielleicht hat die einen nen Bug, weils ne ältere is, etc.


----------



## Kaffeebohne (19. Mai 2005)

Hmm,

compiliert wurde es unter 1.4.2_07, aufgerufen unter 1.5.0.

Eine andere Entwicklungsumgebung benutzte ich momentan noch nicht.


----------



## thE_29 (19. Mai 2005)

Und das tritt immer auf wenn du es aus der IDE startest oder nur ab und zu??


----------



## Kaffeebohne (19. Mai 2005)

Nein umgekehrt es ist immer in Ordnung wenn ich es aus der IDE heraus starte, aber nicht wenn ich es von Hand mache (JAVAPFAD\java.exe -jar javadatei.jar)

Ich habs gerade mal unter 1.4.2_07 getestet, da sieht es so aus:


----------



## thE_29 (19. Mai 2005)

Und passt das so jetzt oder nicht??


----------



## Kaffeebohne (19. Mai 2005)

Hmm, ist schon viel besser.

Aber ich verstehe nicht wie es zu diesen Farbunterschieden kommen kann. Hast du sowas auch schon mal gehabt? Sollte man den einzelnen Komponente explizit noch die graue Farbe zuweisen?


----------



## thE_29 (19. Mai 2005)

Naja, die CheckBoxen haben einfach andere Hintergrundfarben als die JLabels...


Aber wenn man sich getBackground holt sind beides das gleiche...


Irgendwas hats da wirklich


----------



## Kaffeebohne (19. Mai 2005)

Ich hab jetzt mal testweise, das ausprobiert:


```
Color currentColor = jButtonAbort.getBackground();
        jLabelProxyUrl.setBackground(currentColor);
```

Aber das Label mit "Enter Proxyadress" hat immer noch die gleiche Farbe.


----------



## thE_29 (19. Mai 2005)

Reden wir jetzt eigentlich von den Labels oder den CheckBoxen??


----------



## Kaffeebohne (19. Mai 2005)

Die Checkboxen und die Buttons haben die richtige Farbe, nur die Labels nicht.


----------



## thE_29 (19. Mai 2005)

Also wenn ich es mit meinen Anwendungen vergleiche, würde ich eher sagen die Buttons und checkboxen haben die falsche Farbe...

Nur die Frage ist, warum da überhaupt ein paar Dinge andere Farben haben!


----------



## Kaffeebohne (19. Mai 2005)

> Also wenn ich es mit meinen Anwendungen vergleiche, würde ich eher sagen die Buttons und checkboxen haben die falsche Farbe



Stimmt, kommt immer auf die Sichtweise an :lol:

Aufjedenfall, sollen alle Elemente bis auf die Textfelder die gleiche Farbe haben.



> Nur die Frage ist, warum da überhaupt ein paar Dinge andere Farben haben!



Kann es vielleicht an der Art der Initalisierung der Komponenten liegen?


----------



## thE_29 (19. Mai 2005)

Nimm mal das setLayout() weg dann gehts nämlich 

Das wird an dem Layout liegen was du zuweißt :bae:


----------



## Kaffeebohne (19. Mai 2005)

Hehe sogesehen ja. Aber dann habe ich ja kein Windows Look&Feel mehr (Windows, weils warscheinlich nur darunter eingesetzt werden wird). Und das wäre echt schade. Das normale Java LF ist meiner Meinung nach eher bescheiden.


----------



## thE_29 (19. Mai 2005)

Naja, dann wird Windows das automatisch so handhaben...

Anders kann ich mir das net erklären!


----------



## Kaffeebohne (19. Mai 2005)

Faszinierend, wenn das Windows echt so handhabt. Was für ein LF benutzt du eigentlich?

Edit:

Ich hab jetzt mal das OfficeLnF spasshalber eingebunden. Der Effekt ist immernoch vorhanden. Echt komisch obwohl es ein anderes LF ist :bahnhof:


----------



## thE_29 (19. Mai 2005)

Ich setz kein LnF!

Ich lasse einfach immer das LnF was vom System kommt.

Spiel mich mit LnF net soviel rum...


----------



## Kaffeebohne (19. Mai 2005)

> Spiel mich mit LnF net soviel rum...


Meinst du: Spiel nicht mit LnF net soviel rum?

Wenn ja, warum?


----------



## thE_29 (19. Mai 2005)

Nein, ich meinte ich spiele micht mit dem LnF zeugs net so rum 

Weils mir meistens egal ist und unsere Kunden sowieso froh sind, das sie jetzt eine grafische Oberfläche haben (die hatten vorher nur die Linux Konsole )


----------



## Kaffeebohne (19. Mai 2005)

Achso...


Kunden? *g* sind das die bei denen das eine Prog auch ohne X11 laufen soll?


----------



## thE_29 (19. Mai 2005)

Jooo....
Rewe halt 

Die starten ein grafisches Tagesende fahren dann die KDE nieder und fragen sich warum unser Programm abbricht.....

Bin eh grad dabei einen Invoker zu schreiben, der sich im Hintergrund aufruft und um alles kümmert (denn könnens wenigstens net töten).

Naja, die sind halt immer lustig


----------



## Kaffeebohne (19. Mai 2005)

Hehe, echt lustig. Wolln die damit eigentlich Strom sparen, oder warum fahren die die graphische Oberfläche runter?


----------



## thE_29 (19. Mai 2005)

Das weiß keiner 

Aber vielleicht das keiner irgendwas mißbraucht....

Obwohl sowieso alle Programme die man aufrufen kann (3 - 4) sowieso Passwörter brauchen...


Jedenfalls haben die das so gelernt und so schnell lernen die das wieder net um...

Hat ja auch 1 Monat gedauert bis wir erst mal auf den Fehler gekommen sind.

Weil wir immer gesagt haben, ihr schaltet das Programm ab (oben aufs X) und sie ."nein nein nein"

Dann haben wir alles gesperrt und es wurde trotzdem abgebrochen (da sind wir dann stutzig geworden...)

Naja, bis wir dann draufgekommen sind, das sie die KDE ausschalte...


----------



## Kaffeebohne (19. Mai 2005)

> Aber vielleicht das keiner irgendwas mißbraucht....


Da reicht es doch zu sperren. Naja, jeder wie er will, hauptsache das gibt Extraöre


----------

