Bereiche
News
Rewind
Tipps & Berichte
Forum
Galerie
Journals
Events
Umfragen
Themenwoche
Kleinanzeigen
Interaktiv
Anmelden
Registrierung
Zu allen empfangenen Nachrichten
Suche...
Zur erweiterten Suche
Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum
>
Entwickler
>
Java: Viele JLabels langsam
Java: Viele JLabels langsam
TeBeO
09.02.09
23:50
Hallo ich habe folgendes Problem. Ich habe ein Java Programm geschrieben indem man ein Bild malen kann und zwar so: Es wird ein Panel erzeugt indem 500x500 JLabels gelegt werden. Nun kann der Anwender Farben auswählen und damit die Labels, über einen Mouselistener gesteuert, welche anmalen. Mein Einziges Problem ist das das sau lange bracht die Labels zu auf den Panel zu schmeißen. Ich habe das über ein GridBagLayout gemacht. Vielleicht hat ja jemand einen Tipp für mich was ich ändern könnte vielleicht eine Idee welches Layout ich sonst verwenden könnte.
Hilfreich?
0
Kommentare
Johloemoe
10.02.09
00:49
WAT?? Das macht ja so auch keiner!
Mach dir doch ne Subclass von JPanel, override die paint(Graphics g)-Methode und Handle, die Mouseevents auch in dem panel. Das geht viel besser! Warum denn 250.000 JLabels? Kein Wunder dass das hakt wie sau, die sind ja dafür auch nicht ausgelegt!
Hilfreich?
0
TeBeO
10.02.09
01:06
Ich habe aber 2 Jpanels ein dem einen des Feld im anderen die auswahl der Farben
Hilfreich?
0
TeBeO
10.02.09
02:23
mein letzter Kommentar sollte gestrichen werden is ja peinlich war grade ein wenig durcheinander weil ich es relativ einfach fand es mit Labels zu machen den nun habe ich das Problem wie ich die einzelne Kästchen unterscheiden kann. Ich poste vielleich mal den Code womit ich mein Raster erzeuge package info;
package info;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
public class feld extends JPanel {
int x;
int y;
int schalter = 0;
public feld(int x1, int y1) {
x = x1;
y = y1;
}
public void paint(Graphics g)
{
System.out.println("hhh");
int i = 0;
int j = 0;
while (i < x) {
while (j < y) {
g.setColor(Color.red);
g.fillRect(i * 6, j * 6, 5, 5);
j++;
}
j = 0;
i++;
}
}
}
das füge ich dann in mein jframe ein. nun muss ich ja nur noch unterscheiden können auf welches quadrat geklickt wird
Hilfreich?
0
Mr. Krabs
10.02.09
04:47
Japp, das machst du mit den mouseevents und fragst dann die Koordinaten ab.
„Deux Strudel!“
Hilfreich?
0
Johloemoe
10.02.09
07:30
Ähm... ehrlich gesagt weiss ich nicht wirklich was du da in der paint Methode versuchst zu machen...
Aber bezüglich der Koordinaten:
feld.addMouseListener(someClass);
und dann in someClass:
mouseClicked(MouseEvent e) - überschreiben! Möglicherweise auch noch MouseDragged etc...
Hilfreich?
0
TeBeO
10.02.09
13:28
in der paint Methode male ich ein Raster welches variabel angelegt wird so das man die Anzahl der Zellen ändern kann. Ich hatte wie auch von Mr. Krabs auch vorgeschlagen das über eine Koordinaten abfrage gemacht, fande es nur unschön aber eine andere Idee habe ich auch nicht.
Vielen dank für euer Hilfe
Hilfreich?
0
Mr. Krabs
10.02.09
14:48
TeBeO:
Naja, was anderes machen die Event-Klassen von Java doch auch nicht um zu checken, auf welches Element du geklickt hast... Du kannst dir dafür auch ne Klasse schreiben, aber ich würde das eben kurz und schmerzfrei mit der Koordinatenabfrage implementieren.
„Deux Strudel!“
Hilfreich?
0
kefek
10.02.09
15:19
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
public class Zeichenfeld extends JPanel{
private char [][] matrix;
public Zeichenfeld(int laenge, int breite){
matrix = new char[breite][laenge];
}
public void setMatrix(int x, int j, char farbe){
matrix[x][j] = farbe;
}
public void paint(Graphics g){
Color farbe;
for(int i = 0 ; i < matrix.length ; i++){
for(int j = 0; j < matrix[0].length ; j++){
switch(matrix[i][j]){
case 'g': farbe = Color.GREEN;
break;
case 'r': farbe = Color.RED;
break;
case 'b': farbe = Color.BLUE;
break;
// usw ....
}
g.setColor(farbe);
g.drawRect(i*5, j*5, 5, 5);
}
}
}
}
Ich würde das ganze in etwa so lösen ...
Der Mouselistener ruft dann einfach die setColor-Methode auf und gibt die geklickten Koordinaten und die gewünschte farbe weiter
„Die Ewigkeit dauert lange, besonders gegen Ende ...“
Hilfreich?
0
kefek
10.02.09
15:26
setColor soolte natürlichs setMatrix-Mehtode heißen
und in die swtich/case soltle man noch ne default einbauen ...
„Die Ewigkeit dauert lange, besonders gegen Ende ...“
Hilfreich?
0
Mr. Krabs
13.02.09
04:53
Japp und die Farbe würde ich als Integer direkt durchschleifen, nicht als char.
„Deux Strudel!“
Hilfreich?
0
Kommentieren
Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.
Hohe Softwareanforderungen: Neues USB-C-Zubehör...
iPod-Vater Tony Fadell wollte Sonos kaufen – St...
Kurz: Trump unterstützt Musk als TikTok-Besitze...
macOS 15.2 steht ab sofort zur Verfügung
Gurman zum Release des neuen Apple TV, HomePods...
Mac OS X: 25 Jahre Aqua, 25 Jahre Dock
Leak in macOS 15.2 Sequoia: Neues MacBook Air k...
2 TByte für 259 US-Dollar: Erste Upgrade-SSDs f...