SWT Control.print(gc) funktioniert in Win, in Linux nicht

GRudiD

Aktives Mitglied
Hallo,

ich versuche seit einigen Stunden einen Fehler aus einer Test-Anwendung zu entfernen. Ich versuche mittels Control.print(gc) ein Label auf einem Composite zu zeichnen. Unter Windows XP/7 ist das Resultat wie erwartet. Linux macht hingegen Probleme. Dort wird der zu zeichnende Bereich mit nicht nachvollziehbarem Quatsch gefüllt. Kann mir jemand erklären, warum das so ist und was man tun kann um das Problem zu lösen?

Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Transform;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Shell;

public class SWTTest {
	private Composite seComposite;
	private Composite nwComposite;
	private Composite neComposite;
	private Composite swComposite;
	
	private Label label;
	
	private final Listener scrollBarListener = new Listener() {
		public void handleEvent(Event event) {
			FormData layoutData = null;
			
			ScrollBar horizontalBar = SWTTest.this.seComposite.getHorizontalBar();
			layoutData = (FormData) swComposite.getLayoutData();
			layoutData.bottom = new FormAttachment(100, horizontalBar.isVisible() ? -horizontalBar.getSize().y : 0);

			ScrollBar verticalBar = seComposite.getVerticalBar();
			layoutData = (FormData) neComposite.getLayoutData();
			layoutData.right = new FormAttachment(100, verticalBar.isVisible() ? -verticalBar.getSize().x: 0);

			swComposite.getParent().layout();
		}
	};
	
	public SWTTest(final Composite parent, int style) {
		int headerHeight = 20;
		int fixedWidth = 50;
		FormData formData;
		
		formData = new FormData();
		formData.top = new FormAttachment(0, 0);
		formData.right = new FormAttachment(0, fixedWidth);
		formData.bottom = new FormAttachment(0, headerHeight);
		formData.left = new FormAttachment(0, 0);
		
		nwComposite = new Composite(parent, SWT.NONE);
		nwComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_YELLOW));
		nwComposite.setLayoutData(formData);
		
		formData = new FormData();
		formData.top = new FormAttachment(0, 0);
		formData.right = new FormAttachment(100, 0);
		formData.bottom = new FormAttachment(0, headerHeight);
		formData.left = new FormAttachment(0, fixedWidth);
		
		neComposite = new Composite(parent, SWT.NONE);
		neComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));
		neComposite.setLayoutData(formData);
		
		formData = new FormData();
		formData.top = new FormAttachment(0, headerHeight);
		formData.right = new FormAttachment(0, fixedWidth);
		formData.bottom = new FormAttachment(100, 0);
		formData.left = new FormAttachment(0, 0);
		
		swComposite = new Composite(parent, SWT.NONE);
		swComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_GREEN));
		swComposite.setLayoutData(formData);
		
		formData = new FormData();
		formData.top = new FormAttachment(0, headerHeight);
		formData.right = new FormAttachment(100, 0);
		formData.bottom = new FormAttachment(100, 0);
		formData.left = new FormAttachment(0, fixedWidth);
		
		seComposite = new Composite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
		seComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE));
		seComposite.setLayoutData(formData);
		seComposite.getHorizontalBar().addListener(SWT.Show, this.scrollBarListener);
		seComposite.getHorizontalBar().addListener(SWT.Hide, this.scrollBarListener);
		seComposite.getVerticalBar().addListener(SWT.Show, this.scrollBarListener);
		seComposite.getVerticalBar().addListener(SWT.Hide, this.scrollBarListener);
		seComposite.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent event) {
				if (label == null || label.isDisposed())
					return;
				
				event.gc.setClipping(0, 0, 100, 20);

				Transform transform = new Transform(event.gc.getDevice());
				transform.translate(-5, -5);
				event.gc.setTransform(transform);
				// HIER TAUCHT DER FEHLER AUF
				label.print(event.gc);
				event.gc.dispose();
			}
		});
		
		label = new Label(seComposite, SWT.NONE);
		label.setText("TEST 123 TEST 456");
		label.setBackground(label.getDisplay().getSystemColor(SWT.COLOR_CYAN));
		label.setBounds(100, 100, 100, 20);
	}
	
	public static void main(String[] args) {
		Display display = Display.getDefault();

		Shell shell = new Shell();
		shell.setText("Shell");
		shell.setLayout(new FormLayout());
		
		new SWTTest(shell, SWT.NONE);
		
		shell.setSize(400, 400);
		shell.open();

		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}
}
 

Wildcard

Top Contributor
Mal abgesehen davon das du wohl einen Bug reporten solltest:
Es handelt sich doch nur um ein Label, also Text + Background, das kannst du doch direkt auf dem GC zeichnen ohne den Umweg über das Label zu gehen,
 

GRudiD

Aktives Mitglied
Hallo,

ich hatte mir sowas schon fast gedacht. Es hätte ja sein können, dass es dafür einen Workaround gibt. Danke für den Hinweis.

Zum Label an sich: das ist wie gesagt nur eine Testanwendung. In der eigentlichen Anwendung sollen später unterschiedliche Komponenten (Label, Button, Checkbox, einige cutomized Controls, ...) in einer Art "erweiterten Tabelle" dargestellt werden. Da davon mehrere hundert gleichzeitig auf dem Bildschirm zu sehen sein können, sollen die Komponenten aus Performancegründen nur gezeichnet werden. Naja, so die Idee :)
 

Wildcard

Top Contributor
ich hatte mir sowas schon fast gedacht. Es hätte ja sein können, dass es dafür einen Workaround gibt. Danke für den Hinweis.
Kann schon sein das es den gibt, mir war dieses Problem bisher jedoch nicht bekannt und es hört sich erstmal nach Bug an.

Zum Label an sich: das ist wie gesagt nur eine Testanwendung. In der eigentlichen Anwendung sollen später unterschiedliche Komponenten (Label, Button, Checkbox, einige cutomized Controls, ...) in einer Art "erweiterten Tabelle" dargestellt werden. Da davon mehrere hundert gleichzeitig auf dem Bildschirm zu sehen sein können, sollen die Komponenten aus Performancegründen nur gezeichnet werden. Naja, so die Idee
Das wird sicher nicht lustig... viel Spaß :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX Lösungsvorschläge für dieses coole Control AWT, Swing, JavaFX & SWT 8
B Java FX In control.TreeCell-Implementierung Binding erzeugen AWT, Swing, JavaFX & SWT 0
Yjuq JavaFX Custom Control - Image resize AWT, Swing, JavaFX & SWT 0
L JavaFX Control Pseudo Class AWT, Swing, JavaFX & SWT 1
D javafx.scene.control.TreeView als dropdown Menü AWT, Swing, JavaFX & SWT 6
D JavaFX Control zur Anzeige von eBooks AWT, Swing, JavaFX & SWT 5
L JavaFX Custom control mit Hover Effekt AWT, Swing, JavaFX & SWT 2
M JavaFX Parameter für Custom Control in FXML übergeben? AWT, Swing, JavaFX & SWT 4
S JavaFX Passendes "control" für ein Spielschein AWT, Swing, JavaFX & SWT 10
yvesdaeschle Outline Control gesucht AWT, Swing, JavaFX & SWT 5
yvesdaeschle List Control mit "card"-Ansicht AWT, Swing, JavaFX & SWT 7
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
L SWT Control.setVisible? AWT, Swing, JavaFX & SWT 2
T Swing Control und Events AWT, Swing, JavaFX & SWT 8
yvesdaeschle SWT OutlookBar Control AWT, Swing, JavaFX & SWT 3
lumo SWT Absolute position einer Composite/Control AWT, Swing, JavaFX & SWT 5
M SWT pack() von org.eclipse.swt.widgets.Control AWT, Swing, JavaFX & SWT 8
G Control für Tabreiter (TabbedPane) AWT, Swing, JavaFX & SWT 8
D Widget/Control während Laufzeit durch ein anderes ersetzen AWT, Swing, JavaFX & SWT 3
M Gain Control: Problem mit float ! AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
C Print-Problem (PrinterIOException) AWT, Swing, JavaFX & SWT 3
I Swing JTable Print mit Hibernate AWT, Swing, JavaFX & SWT 2
R Print von JTable und JLabel AWT, Swing, JavaFX & SWT 2
kodela AWT eine Seite - zweimal print() AWT, Swing, JavaFX & SWT 7
martin82 Swing JTable print() AWT, Swing, JavaFX & SWT 2
A Java Print: Bilder werden zu groß ausgedruckt AWT, Swing, JavaFX & SWT 6
L Probleme mit java.awt.print.book AWT, Swing, JavaFX & SWT 2
G Print JList AWT, Swing, JavaFX & SWT 2
M JTable.print()? AWT, Swing, JavaFX & SWT 6
Juelin if Abfrage funktioniert nicht richtig AWT, Swing, JavaFX & SWT 10
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
R auto. Importanweisungen für javafx funktioniert in Eclipse nicht mehr AWT, Swing, JavaFX & SWT 4
M Scrollbar funktioniert nicht AWT, Swing, JavaFX & SWT 10
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
W JEditorPane textausrichtung nach settext funktioniert nicht mehr AWT, Swing, JavaFX & SWT 11
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Swing Tooltip-Delay funktioniert nicht immer. AWT, Swing, JavaFX & SWT 1
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
sserio Wie funktioniert ein Controller bei JavaFx? AWT, Swing, JavaFX & SWT 1
U Wie funktioniert das rotieren unter 2dGraphics, also wie stelle ich z. B. 90° ein? AWT, Swing, JavaFX & SWT 1
U Wie funktioniert Polygon? AWT, Swing, JavaFX & SWT 1
U Wie genau funktioniert 2dgraphics, in diesem Bezug? AWT, Swing, JavaFX & SWT 4
S ChoiceBox aus ArrayList per setValue() mit Wert belegen funktioniert nicht. AWT, Swing, JavaFX & SWT 0
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
H BufferedImage zurücksetzen funktioniert nicht AWT, Swing, JavaFX & SWT 12
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
EinNickname9 Einfacher parser funktioniert nicht AWT, Swing, JavaFX & SWT 2
F Swing Adapt Row Height funktioniert nicht richtig :( AWT, Swing, JavaFX & SWT 7
P Swing jxmapviewer hinzufügen/nutzen funktioniert nicht AWT, Swing, JavaFX & SWT 7
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
J Anbindung Textfeldklasse an Table funktioniert nicht AWT, Swing, JavaFX & SWT 3
R Actionlistener funktioniert nicht AWT, Swing, JavaFX & SWT 4
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
H Bewegung funktioniert nicht AWT, Swing, JavaFX & SWT 3
N Pixelfarbe abgleichen funktioniert nicht AWT, Swing, JavaFX & SWT 5
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
M Swing setMaximumSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
K JavaFX funktioniert nicht AWT, Swing, JavaFX & SWT 2
B AWT actionPerformed Method funktioniert nicht AWT, Swing, JavaFX & SWT 12
L JavaFX Drag and Drop funktioniert nicht AWT, Swing, JavaFX & SWT 3
M Swing Code funktioniert auf Windows aber nicht Linux... AWT, Swing, JavaFX & SWT 3
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
J JavaFX addListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
P CardLayout funktioniert fehlerhaft AWT, Swing, JavaFX & SWT 13
L WrapLayout funktioniert nicht AWT, Swing, JavaFX & SWT 1
kodela Accalerator für einige Menüoptionen funktioniert nicht mehr AWT, Swing, JavaFX & SWT 3
S JavaFX mit javac compilieren funktioniert nicht AWT, Swing, JavaFX & SWT 2
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
J AWT System Farben / java.awt.SystemColor funktioniert nicht AWT, Swing, JavaFX & SWT 4
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
it_is_all ActionListener umlenken/ updaten mit AddActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 3
K javafx app > "run in browser" funktioniert nicht AWT, Swing, JavaFX & SWT 3
N JavaFX GridPane Halignment funktioniert nicht AWT, Swing, JavaFX & SWT 1
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
R Ausgabe über JOptionPane.showMessageDialog funktioniert nicht AWT, Swing, JavaFX & SWT 2
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
F "ActionListener" funktioniert nicht AWT, Swing, JavaFX & SWT 4
Z BoxLayout funktioniert nicht und Buttongröße AWT, Swing, JavaFX & SWT 18
C Java Hintergrund funktioniert nicht AWT, Swing, JavaFX & SWT 9
J Swing Wie funktioniert dieser ChangePropertyListener??? AWT, Swing, JavaFX & SWT 0
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
M UIManager funktioniert nicht mit Farben AWT, Swing, JavaFX & SWT 9
M Swing UIManager funktioniert nicht mit Farben AWT, Swing, JavaFX & SWT 0
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
S JavaFX wie funktioniert CSS und javaFX AWT, Swing, JavaFX & SWT 19
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben