Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Banana-Coding.com - Java Knuddels Emulator. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

14.08.2013, 18:32

Emulator - Popup [bessere Positionierung?]

Hi,

erstmal danke Flav für das Reversen. Man kann es jedoch verbessern, schaut mal in der Popup.java:

Quellcode

1
2
3
4
5
6
7
8
9
10
    	if (message != null) {
        	buffer.writeByte('C');
        	buffer.writeByte('c');
        	addString(buffer, message);
        	addFrameSize(buffer, width, height);
        	addForeground(buffer, new int[] { 0x00, 0x00, 0x00 });
        	addBackground(buffer, new int[] { 0xBE, 0xBC, 0xFB });
        	addBackgroundImage(buffer, "pics/cloudsblue.gif", 17);
        	buffer.writeByte(0xE3);
    	}


buffer.writeByte('C'); -> immer CENTER, kann man ja ändern in N (North) beispielsweise (Positionierung)
buffer.writeByte('c') -> das ist eine Komponente (TextPanelLight), Button ist ja z.B. 'b'.
addFrameSize(buffer, width, height); -> das ist die Größe vom TextPanelLight, hier wird die Größe des kompletten Fensters gesetzt.

Kennt ihr das /code-Fenster mit den ganzen Smileys in den CheckBoxen, die dann an den Server gesendet werden? Das kann man auch mit kcode-erzeugten (lol, was für ein Wort) TextFeldern machen. Beim TextPanelLight gibt es nämlich einen Parameter 't'. Mit sendback werden die Components zurückgesendet.

Ich hab das Ganze hier in C#, so sieht es bei mir aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
else if (type == ComponentType.TEXTPANELLIGHT)
                    	{
                        	TextPanelLight t = (TextPanelLight)component;

                        	AddBackgroundImage(buffer, "pics/cloudsblue.gif", 17);

                        	AddForeground(buffer, t.GetForeground());
                        	AddBackground(buffer, t.GetBackground());

                        	buffer.Append('n');

                        	AddFrameSize(buffer, t.Width, t.Height);

                        	if (t.SendBack)
                        	{
                            	buffer.Append('t');
                            	AddString(buffer, "sendback");
                        	}
                    	}


Und so sieht meine TextPanelLight-Klasse aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ChatServer.PopupUtil
{
	public class TextPanelLight : Component
	{
    	private String Content;
    	public bool SendBack { get; private set; }
    	public int Width { get; private set; }
    	public int Height { get; private set; }
    	public int[] Foreground { get; private set; }
    	public int[] Background { get; private set; }

    	public TextPanelLight(string content, bool sendback, int width, int height)
    	{
        	this.Content = content;
        	this.SendBack = sendback;
        	this.Width = width;
        	this.Height = height;
    	}

    	public new ComponentType GetType()
    	{
        	return ComponentType.TEXTPANELLIGHT;
    	}

    	public int[] GetForeground()
    	{
        	return new int[] { 0, 0, 0 };
    	}

    	public void SetForeground(int[] foreground)
    	{
        	this.Foreground = foreground;
    	}

    	public int[] GetBackground()
    	{
        	return new int[] { 255, 255, 255 };
    	}

    	public void SetBackground(int[] background)
    	{
        	this.Background = background;
    	}

    	public String GetText()
    	{
        	return this.Content;
    	}
	}
}


Das erstmal dazu.

Dann schauen wir mal in der Popup.java

Quellcode

1
2
3
4
5
6
7
8
9
10
    	for (Panel panel : panels) {
        	buffer.writeByte('S');

        	if (useBorderLayouts) {
            	borderLayouts++;
            	addLayout(buffer, 'B');
            	buffer.writeByte('N');
        	}

        	addLayout(buffer, 'F');


buffer.writeByte('S'); -> die Panels werden IMMER SÜDLICH positioniert, wie wäre es mit panel.getPosition() (default: 'S', kann man jedoch mit setPosition ändern), um die Panels anders anzuordnen...

Quellcode

1
2
3
4
5
6
7
        	if (useBorderLayouts) {
            	borderLayouts++;
            	addLayout(buffer, 'B');
            	buffer.writeByte('N');
        	}

        	addLayout(buffer, 'F');


Hier habe ich noch nicht rumgespielt, das ist euch überlassen.

Viel Spaß beim Ausprobieren.

Ähnliche Themen