Mit fehlerhaften SCCEE zum zweifarbigen Filechooser

Hallo,
ich habe hier ein fehlerhaftes SCCEE für einen Filechooser. Die Buttons werden leider nicht dargestellt und man muss erst mit Alt-F4 den Ok-Dialog schließen um zum Filechooser zu kommen. Daher meine erst Frage: Wie werden die Buttons dargestellt und haben eine Funktion?
Und zu meiner eigentlichen Frage: Wie wird der Filechooser komplett in grün/schwarz dargestellt? Dafür die folgenden Fragen:

  1. Wie werden die kleinen Buttons, der Scrollbars mit den grünen Dreiecken ausgestattet? Dies betrifft sowohl den Directory-/File-Panel als auch die JComboboxes.
  2. Wie werden in den JComboboxes die List und das Dreieck durch einen senkrechten, dünnen grünen Strich getrennt?

Danke!


import javax.swing.UIManager;

public class ShockCfg
{ 
	public static void main(final String args[])
	{
		UIManager.put("Button.focus",new javax.swing.plaf.ColorUIResource(Color.GREEN));
		UIManager.put("CheckBox.focus",new javax.swing.plaf.ColorUIResource(Color.GREEN));
		UIManager.put("RadioButton.focus",new javax.swing.plaf.ColorUIResource(Color.GREEN));
		
		new ReadCfg();
	}
}

public class ReadCfg
{
	private String readpath;		//Path to System Shock 2.
	private String IniLanguage = "DE";    //Language of ShockCfg
	
	public String getreadpath()
	{
		return readpath;
	}

	public void setreadpath(String readpath)
	{
		this.readpath = readpath;
	}
	
	public String getIniLanguage()
	{
		return IniLanguage;
	}

	public ReadCfg()
	{
		try
		{
			
			BufferedReader buffer = new BufferedReader( new FileReader("ShockCfg.ini"));
			readpath = buffer.readLine();
			IniLanguage = buffer.readLine();
			buffer.close();
		}
		catch (IOException e) 
		{
			//if shockcfg.cfg don't exists, open filechooser.
			new WriteCfg(this);		
		}		
	}
}
import java.awt.*;

import javax.swing.*;
import javax.swing.plaf.metal.MetalComboBoxButton;
import javax.swing.plaf.metal.MetalComboBoxIcon;

import java.util.ArrayList;
import java.util.Locale;

public class WriteCfg
{
	private final JFileChooser dir;
	private int returnval;
	private File shock2exe;
	private BufferedWriter bufferwrite;
	private ReadCfg readcfg;
	
	public WriteCfg(ReadCfg readcfg)
	{
		this.setReadcfg(readcfg);
		UIManager.put("OptionPane.questionDialog.border.background", new javax.swing.plaf.ColorUIResource(Color.GREEN));
		UIManager.put("activeCaption", new javax.swing.plaf.ColorUIResource(Color.black));
		UIManager.put("OptionPane.questionDialog.titlePane.background", new javax.swing.plaf.ColorUIResource(Color.BLACK));
		UIManager.put("OptionPane.questionDialog.titlePane.foreground", new javax.swing.plaf.ColorUIResource(Color.GREEN));
		UIManager.put("activeCaptionText", new javax.swing.plaf.ColorUIResource(Color.green));
		UIManager.put("OptionPane.questionDialog.titlePane.shadow", new javax.swing.plaf.ColorUIResource(Color.GREEN));
		javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme(new NoBumpsTheme());
		JDialog.setDefaultLookAndFeelDecorated(true);
		
		//Inverting Colors for pressed Buttons
		try {
		    UIManager.setLookAndFeel( new MyLookAndFeel() );
		} catch (UnsupportedLookAndFeelException e) {
		        // TODO Auto-generated catch block
		        e.printStackTrace();
		}
		
		JOptionPane optPane = new JOptionPane("Select directory of SS2");
		optPane.setOptionType(JOptionPane.DEFAULT_OPTION);
		JDialog dia = optPane.createDialog(null, "Select directory of SS2");
		dia.getRootPane().setBorder(BorderFactory.createLineBorder(Color.green, 3));
		changeColor(dia.getComponents());
		dia.setModal(true);
		dia.setVisible(true);
		
		//Inverting Colors
		UIManager.put("Button.select", Color.green);
		
		//Filechooser opening
		dir = new JFileChooser()
		{
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			public JDialog createDialog(Component parent)
			{
				JDialog d = super.createDialog(parent);
				d.getContentPane().setBackground(Color.black);
				return d;
			}
		};
		changeColor(new Component[]{dir});
        colorChooser(dir);
        dir.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		returnval = dir.showDialog(null, "Choose");
		if (returnval == JFileChooser.APPROVE_OPTION)
		{	
			shock2exe = dir.getSelectedFile();
			try 
			{
				//make shockcfg.cfg
				bufferwrite = new BufferedWriter( new FileWriter("ShockCfg.ini"));
				readcfg.setreadpath(shock2exe.getPath());
				bufferwrite.write(readcfg.getreadpath());
				//thx to Al_B
				bufferwrite.write("
");
				
				Locale w = Locale.getDefault();
				if(w.getLanguage().equalsIgnoreCase("de_DE"))
				{
					bufferwrite.write("de_DE");
				}
				else
				{
					bufferwrite.write("en_EN");
				}
				
				bufferwrite.write("
");
				
				bufferwrite.close();
			} 
			catch (IOException ex)
			{
				System.out.println("Can not write file");
				System.out.println(ex);
				System.exit(0);
			}
		}
		else
		{
			System.exit(0);
		}
	}
	
	public void colorChooser(JFileChooser chooser){
        @SuppressWarnings("rawtypes")
        java.util.List<JComboBox> boxes = getComponents(chooser, JComboBox.class);
        for(@SuppressWarnings("rawtypes")
        JComboBox box : boxes)
        {
            java.util.List<JButton> buttons = getComponents(box, JButton.class);
            for(JButton button : buttons)
            {
                MetalComboBoxButton b = (MetalComboBoxButton)button;
                b.setComboIcon(new MyIcon());
            }
 
            box.setForeground(Color.GREEN);
            box.setBackground(Color.BLACK);
            box.setBorder(BorderFactory.createLineBorder(Color.green));
        }
    }
 
    public void changeColor(Component[] comp)
    {
        for(int x=0; x<comp.length; x++)
        {
            try
            {
                comp[x].setBackground(Color.black);
                comp[x].setForeground(Color.green);
            }
            catch(Exception e) {}
            if(comp[x] instanceof Container)
                changeColor(((Container)comp[x]).getComponents());
        }
    }
 
    public class MyIcon extends MetalComboBoxIcon
    {
        private static final long serialVersionUID = -6616394682227867147L;
 
        public void paintIcon(Component c, Graphics g, int x, int y)
        {
            int iconWidth = getIconWidth();
            g.translate( x, y );
 
            g.setColor(Color.GREEN);
            g.drawLine( 0, 0, iconWidth - 1, 0 );
            g.drawLine( 1, 1, 1 + (iconWidth - 3), 1 );
            g.drawLine( 2, 2, 2 + (iconWidth - 5), 2 );
            g.drawLine( 3, 3, 3 + (iconWidth - 7), 3 );
            g.drawLine( 4, 4, 4 + (iconWidth - 9), 4 );
 
            g.translate( -x, -y );
        }
    }
 
    public static <T> java.util.List<T> getComponents(Component component, Class<T> clazz)
    {
        java.util.List<T> comps = new ArrayList<T>();
 
        if(clazz.isInstance(component))
        {
            comps.add(clazz.cast(component));
        }
        else if(component instanceof Container)
        {
            for(Component c : ((Container)component).getComponents())
            {
                comps.addAll(getComponents(c, clazz));
            }
        }
 
        return comps;
    }

	public ReadCfg getReadcfg() {
		return readcfg;
	}

	public void setReadcfg(ReadCfg readcfg) {
		this.readcfg = readcfg;
	}
	
}

class NoBumpsTheme extends javax.swing.plaf.metal.DefaultMetalTheme
{
	public javax.swing.plaf.ColorUIResource getControl(){
		return new javax.swing.plaf.ColorUIResource(Color.BLACK);
	}
	
	public javax.swing.plaf.ColorUIResource getWhite(){
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}
		
	public javax.swing.plaf.ColorUIResource getWindowBackground(){
		return new javax.swing.plaf.ColorUIResource(Color.BLACK);
	}
	
	public javax.swing.plaf.ColorUIResource getPrimaryControlHighlight(){
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}
	
	public javax.swing.plaf.ColorUIResource getPrimaryControlDarkShadow(){
		return new javax.swing.plaf.ColorUIResource(Color.BLACK);
	}
	
	public javax.swing.plaf.ColorUIResource getPrimaryControlShadow(){
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}
	
	public javax.swing.plaf.ColorUIResource getPrimaryControl(){
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}
	
	public javax.swing.plaf.ColorUIResource getSecondary1()	{
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}
	public javax.swing.plaf.ColorUIResource getControlDarkShadow()	{
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}	
 	public javax.swing.plaf.ColorUIResource getControlShadow()	{
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}	
 	public javax.swing.plaf.ColorUIResource getControlHighlight()	{
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}
 	
 	public javax.swing.plaf.ColorUIResource getTextHighlightColor()	{
 		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
 	}
 	public javax.swing.plaf.ColorUIResource getHighlightedTextColor()	{
 		return new javax.swing.plaf.ColorUIResource(Color.BLACK);
 	}
 	
 	public javax.swing.plaf.ColorUIResource getSecondary3()	{
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}
 	
 	public javax.swing.plaf.ColorUIResource getPrimary2()	{
		return new javax.swing.plaf.ColorUIResource(Color.GREEN);
	}
 	
 	public javax.swing.plaf.ColorUIResource getControlInfo()	{
		return new javax.swing.plaf.ColorUIResource(Color.BLACK);
	}
}
import javax.swing.plaf.metal.MetalLookAndFeel;
 
@SuppressWarnings("serial")
public class MyLookAndFeel  extends MetalLookAndFeel {  
        protected void initClassDefaults(UIDefaults table)   
        {  
            super.initClassDefaults(table);  
            table.put( "ButtonUI", "test.ButtonUI" );  
        }  
            
}

Das ist doch ein Scherz!

Kurze Info zum Background:
Der TO arbeitet seit 6 Jahren an einem config-Tool für das Spiel SystemShock2 und nutzt dabei Unmengen an Zeit um eine Swing-Gui schwarz-grün zu bekommen. Eigeninitative beim helfen ist nicht vorhanden, Java-Verständnis auch nicht.
Das ganze zieht sich auch durch mehrere Foren, im JF ging der Tanz ca 1 Jahr bis der letzte Thread ins OT verschoben und am Ende geschlossen wurde.
Ein relativ vollständiger Thread findet sich hier:
http://www.ttlg.com/forums/printthread.php?t=116097&pp=25&page=1

Gruß

Mal von dem miserablem Englisch abgesehen(“if shockcfg.cfg doesn’t exist…”) ist dein JAVA NOCH MISERABLER!!!
Naja back to topic, abonniert ^^

Aaaaargh… ::crazy

Yeah! And here we go…

Firephoenix anstatt dich so schlecht in übler Nachrede zu üben solltst du helfen, das gilt auch für den Rest der dummen Bande die keine Ahnung von Java haben!!! Ich habe kein Lust zu streiten und brauche Hilfe wie ich geschrieben habe!!! :grr:

Also was ist falsch an meinem SCCEE? Und wie bekomme ich die drei Layoutbugs im Filechooser behoben?

[QUOTE=Unregistriert]Firephoenix anstatt dich so schlecht in übler Nachrede zu üben solltst du helfen, das gilt auch für den Rest der dummen Bande die keine Ahnung von Java haben!!! Ich habe kein Lust zu streiten und brauche Hilfe wie ich geschrieben habe!!! :grr:

Also was ist falsch an meinem SCCEE? Und wie bekomme ich die drei Layoutbugs im Filechooser behoben?[/QUOTE]

mmd :smiley:

Achja du hast vergessen:

  • Es sind doch nur noch 3 kleine Buttons zu ändern damit der Rickenbacker funktioniert
  • Hört endlich auf zu spammen
  • Ihr wisst doch wie es geht
  • Ich bin kein Hacker sondern Grafikprogrammierer
  • .

Edit: Ab sofort genieße ich wieder still ^^

Üble Nachrede kann ich beim besten willen nicht finden, nur Fakten:
-Du arbeitest seit 6 Jahren an dem Tool: Datum im verlinktem Thread
-Die meiste Zeit verschwendest du für die Gui: Siehe der Thread
-Eigeninitative ist nicht vorhanden: Das haben wir im JF lange genug durchgekaut, du willst fertige Lösungen
-Java verstehst du nicht, du kopierst nur Codeschnipsel von anderen bei dir rein (das beste Beispiel war beim letzten mal, als der Thread sich fast 2 Seiten nur darum gedreht hat, als du Code von einer geposteten Methode einfach mitten in die Klasse geklatscht hast, ohne Methodenrumpf… man sieht in Eclipse sofort, was da nicht passt).
-Den verlinkten Thread hast du selber geschrieben

Dass du Hilfe benötigst würde ich nicht abstreiten.

Gruß

Bitte das hier schließen…

Hat jemand das Dossier der Zeit vorletzte Woche gelesen?

http://www.zeit.de/2013/31/rekonstruktion-familiendrama

Er kassiert Vorschüsse, jedes Mal mehrere Tausend Euro. Oft arbeitet er nachts und am Wochenende; wenn er am Rechner sitzt, hat er Dutzende Bildschirmfenster gleichzeitig geöffnet.

Man kann wirklich nur hoffen, dass NiXPhoe ein Troll ist. Oder dass er aus der Sicherheit seiner Gummizelle heraus schreibt.

Oh ja, das tust du…
Aber als Teil „der dummen Bande, die keine Ahnung von Java hat“, kann ich dir leider nicht helfen :frowning:

Eigentlich wollte ich gar nichts schreiben, der Thread fiel mir schon gestern Abend auf…
Sag’ mal NiXPhoE… Weisst du überhaupt was Sache ist? Hast du gar keine Angst mehr vor Hackern?
Zu deinem Problem: Wie gesagt… (leider finde ich den Thread nicht mehr… :lol:) versuch’s mal mit 'nem Phosphor-P1-Monitor (GreenSreen). Sollte gehen.

Ne, bitte nicht. Der Thread hat ja nicht mal ansatzweise sein Potential erreicht. Gib dem Thread doch noch 99Posts zeit – erst danach kann man doch bei dem TO sehen, wie sich das entwickelt :smiley:

[QUOTE=Tomate_Salat;23261]Ne, bitte nicht. Der Thread hat ja nicht mal ansatzweise sein Potential erreicht. Gib dem Thread doch noch 99Posts zeit – erst danach kann man doch bei dem TO sehen, wie sich das entwickelt :D[/QUOTE]Ausserdem… was hätte man denn sonst zu kichern?

Ich weis nicht, ist dieser Nixphoe wirklich echt oder trollt hier jemand? Mir kommt vor allem in OP die Ausdrucksweise sehr viel, sagen wir mal nicht Nixphoe mäßig vor**?**

es wurde bis jetzt auch noch viel zu wenig nach nem fertigen Code gebettelt…

Oder er versucht es nun auf Freundlich uns dazu zu bewegen ihm seine Arbeit zu machen.

Ich finde er benutzt zu viele “Fachwörter” für den echten NixPhoE…

Ich in der echte und ich bin kein Hacker!!! Also hört auf unfair zu mir zu sein, ich bin ein ahnungsloser Entwickler!!! Wo ist Landei? der hatte wenigstens geholfen!!!? Ich entwickle sicher keinen GUI-Hack, as müsst ihr tun!!! :wink: :slight_smile:

Ich dachte die Leute die hier sind wären ein wenig reifer, aber das hier ist nur peinlich. Gut, ich bin raus - auf die Mogelpackung hab ich keinen Bock. Gebt mir bescheid wenn sich der echte NixPhoe angemeldet hat :kaffee: