LookAndFeel Antialiasing

Xunil

Mitglied
Hallo,

ich weiß nicht ob das direkt möglich ist, aber ich hab eine kleine Java-Anwendung in der es einen "Einstellungen" Dialog gibt.
Darin kann der Benutzer selbst auswählen, ob er den Text mit oder ohne Antialiasing haben will ...
Es gibt dort eine ComboBox in der folgende RenderingHints-values drin stehen.

Code:
            RenderingHints.VALUE_TEXT_ANTIALIAS_OFF, 
            RenderingHints.VALUE_TEXT_ANTIALIAS_GASP, 
            RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HBGR,
            RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB,
            RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VBGR,
            RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VRGB,
            RenderingHints.VALUE_TEXT_ANTIALIAS_ON
Jetzt hätte ich gerne, dass sich der Text in der gesammten Anwendung dem ausgewähltem Item anpasst.
Kann man das überhaupt zur Laufzeit machen ?
Code:
   getGraphics().setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,  RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
Scheint irgendwie nicht zu funktionieren..

Danke für jeden Tipp

Grüße
 

Antoras

Top Contributor
Warum sollte das nicht gehen? Zeichnest du deine Komponente(n) auch neu nachdem du Antialiasing de-/aktiviert hast?
 

Xunil

Mitglied
Hi,
danke erstmal.

Also mit
Code:
System.setProperty("awt.useSystemAAFontSettings","on"); // on , off, lcd  ...

funktioniert es .. allerdings nur wenn das Property vor dem Starten der GUI gesetzt wird.. etwa in der main Methode.

Ich frage mich ob man das auch zur Laufzeit innerhalb der GUI ändern kann..

Danke !
 

Antoras

Top Contributor
Properties sind halt immer so eine Sache, da sie oft systemabhängig sind. Was spricht dagegen, die Einstellung direkt in der Zeichenkomponente zu setzen?

Java:
public class AntialiasingTest {
	
	static boolean isAntialiasingActivated = false;
	
	public static void main(final String[] args) {
		// press a key to activate / deactivate antialiasing
		final JFrame f = new JFrame("AntialiasingTest");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(200, 100);

		final JPanel p = new JPanel() {
			@Override
			protected void paintComponent(final Graphics g) {
				super.paintComponent(g);
				((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
						isAntialiasingActivated
							? RenderingHints.VALUE_ANTIALIAS_ON
							: RenderingHints.VALUE_ANTIALIAS_OFF);
				g.setFont(new Font(getFont().getFontName(), getFont().getStyle(), 30));
				g.drawString("Hello world", 10, 50);
			}
		};
		p.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(final KeyEvent e) {
				isAntialiasingActivated = !isAntialiasingActivated;
				p.repaint();
			}
		});
		p.setFocusable(true);

		f.add(p);
		f.setVisible(true);
	}
}
 

Marco13

Top Contributor
Es ging wohl um ein Programm, in dem schon 23145 Components existieren, und nachträglich AA eingeschaltet werden soll (ohne dass man 100 JLabels durch "JLabelWhichSetsAntiAliasingInPaintComponent" ersetzt werden müssen)
 

Ähnliche Java Themen

Neue Themen


Oben