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.