ZOOM Hilfe

Hi,
huch nu fragste aber nicht sehr gezielt.
Meinst Du dies bezogen auf Grafik?
Oder geht es Dir darum die Auflösung Deines Anwendungs-GUI dynamisch zu gestallten?
Oder meinst Du eine Lupe, die einen Bildschirmauszug vergrößert?

Takidoso
 
Hallo takidoso

Na ich meinte eine komplette Applikation.
Es wurde sich beschwert das alles ein bischen zu klein ist und ich möchte nicht durch alles durch gehen um alle größen ändern. JLabel,JTextField......
 
Hi,
folgende Prämissen bezüglich meines Tips:
Ich gehe davon aus, dass es sich hauptsächlich um die Schrift geht (Font-größe und Art) und Du Swing verwendest. Bei einem anderen Framework mag es anders wenn vielleicht auch ähnlich gehen.

Generell könnte man die verschieden "Komponententypen" die Du verwendest, Buttons, Tab-Panels, Tabellen etc zentral ableiten und zentral sie mit der entsprechenden Font-Größe und ähnlichem versehen.
Ausgehnde von Swing....
JComponent hat eine routine die da heißt protected void setUI(ComponentUI newUI)
Diese wird von den verschiedenen Componenten wie JTabPane, JButton ... sogar als public und mit spezielleren ComponentUI überladen. Programmatisch hießt dass, dass Du Dir eigene ComponentUI's baust und diese dann in Deine abgeleteten Kompnenten mit setUI(...) zur Verfügung stellst. Diese abgeleteten Komponenten ersetzten dann die ursprünglichen.
Alternativ kannst Du natürlich auch jedem Button bzw anderen Komponente direkt mit dem setUI beglücken, weiß aber nicht ob dies in Deinem Fall so viel spaß macht :-)

Ich bin mir aber weiterhin nicht ganz im klaren ob man nicht auch durch irgenwelche Properties oder ResourceBundels (oder weiß der Heinker) elegant die jeweiligen Defaults der speziellen ComponentenUI abändern kann, da halt nochmal rechercherien mit den Stichworten ComponentenUI Resouce und oder Property Properties

viel Glück

Takidoso
 
Hier ein kleines Beispiel wie ich es meine in diesem Fall für die Größe der Registerkarten in einem JTabPane

Code:
    public class MyTabbedPaneUI extends BasicTabbedPaneUI
    {
        private Insets myTabInsets = new Insets(10, 10, 10, 10);

        public MyTabbedPaneUI()
        {
        }

        protected Insets getTabInsets(int tabPlacement, int tabIndex)
        {
            return myTabInsets;
        }
    } // end of class MyTabbedPaneUI
Dann der Gebrauch wenn man z.B. nur ein bestimmtes JTabPanel anpassen möchte ohen ein solches abgeleitet zu haben, z.B. in irgendeinem JFrame
Code:
    ...
   JTabPanel m_tabPane = new JTabPane();
    ...
    m_tabPane.setUI(new MyTabbedPaneUI());
 
Ich hab mir das jetzt mal genau angesehen doch leider sieht es so aus als müsste ich doch durch alle Programmteile gehen und alle JComponenten anfassen!
Oder schnalle ich da was nicht.
Du hast dir echt mühe gegeben um mir es klar zu machen.
Leider stehe ich mal wieder auf der Leitung.
 
Wenn Du die Komponenten ableitest die einen anderen Stil haben sollen, dann müsstest Du eigentlich nur die Deklarationen austauschen (also mit Suche und ersetzten rangehen)
(JButton wird zu MyJButton etc.) man könnte dann noch etwas dazubaslten, was per Knopfdruck eine individuelle einstellung der Gesamt-Applikation ermöglicht.
aber wie gesagt vielleicht gibt es ja auch noch eine elegantere Möglichkeit durch irgendwelche Properties in der Laufzeitumgebung. Da solltestes Du aber nochmal googlen.

Takidoso
 
Hallo!

Die Schriftgröße aller Komponenten könnte man zur Laufzeit wie folgt ändern:
Code:
 package de.tutorials;
 
 import java.awt.Font;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.Enumeration;
 import java.util.Iterator;
 
 import javax.swing.BoxLayout;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.SwingUtilities;
 import javax.swing.UIDefaults;
 import javax.swing.UIManager;
 import javax.swing.plaf.FontUIResource;
 
 public class GlobalFontChangeExample extends JFrame {
 
 	public GlobalFontChangeExample() {
 		super("GlobalFontChangeExample");
 		setDefaultCloseOperation(EXIT_ON_CLOSE);
 
 		setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS));
 		JLabel lbl = new JLabel("" + System.currentTimeMillis());
 		add(lbl);
 		lbl = new JLabel("" + System.currentTimeMillis() * Math.random());
 		add(lbl);
 		lbl = new JLabel("" + System.currentTimeMillis() * Math.random());
 		add(lbl);
 		lbl = new JLabel("" + System.currentTimeMillis() * Math.random());
 		add(lbl);
 		lbl = new JLabel("" + System.currentTimeMillis() * Math.random());
 		add(lbl);
 		lbl = new JLabel("" + System.currentTimeMillis() * Math.random());
 		add(lbl);
 		lbl = new JLabel("" + System.currentTimeMillis() * Math.random());
 		add(lbl);
 
 		JButton btnChangeFontSize = new JButton("Change Fontsize +1");
 		btnChangeFontSize.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				UIDefaults uiDefaults = UIManager.getDefaults();
 
 				Enumeration keys = uiDefaults.keys();
 				while (keys.hasMoreElements()) {
 					Object key = keys.nextElement();
 		    		if (key.toString().endsWith(".font")) {
 		    			Font font = uiDefaults.getFont(key);
 		    			font = new FontUIResource(font.deriveFont(font
 		    		    		.getSize() + 1.F));
 		    		    uiDefaults.put(key, font);
 					}
 				}
 
 				SwingUtilities
 		    		    .updateComponentTreeUI(GlobalFontChangeExample.this
 		    		    		.getContentPane());
 				pack();
 			}
 		});
 		add(btnChangeFontSize);
 
 		pack();
 		setVisible(true);
 	}
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		new GlobalFontChangeExample();
 	}
 
 }

Gruß Tom
 
Zurück