[java] zmiana rozmiaru czcionki

0

W jaki sposób mogę zrobić tak, że kiedy powiększam okienko aplikacji (czy też apleta) to zwiększa mi się rozmiar czcionki na przyciskach? Są jakieś wbudowane funkcje do tego? Czytałem dokumentację FONT'a ale kompletnie się w tym gubię.

0

Dzięki wielkie. Niestety coś w moim przypadku nie chce to zadziałać. Częściowy kod, dla jednego przycisku.

 
class MyFrame extends Frame implements ActionListener,ComponentListener{
    	    CalcBinaryTest p;
            private int fontSize=32;
            public Font font=new Font("Helvetica", Font.BOLD, fontSize);
            private int width;
            private int height;

            ButtonSUM suma = new ButtonSUM(p);

            MyFrame(CalcBinaryTest p) 
	    {
		
		super("Kalkulator Binarny");
		
		setBounds(100, 100, 300, 300);
		setBackground(Color.YELLOW);
		setLayout(new GridLayout(11,1));
		addWindowListener(new MyWindowAdapter());
		setFont(font);

                suma.addKeyListener(p.keyListener);

                suma.addComponentListener(this);
                suma.setFont(new Font("Helvetica", Font.BOLD, fontSize));
                add(suma);
		width=suma.getWidth();
	        height=suma.getHeight();
                setResizable(true);
	     }

            public void componentHidden(ComponentEvent arg0) {

            }

            @Override
            public void componentMoved(ComponentEvent arg0) {

            }
	    public void componentResized(ComponentEvent arg0)
            {
                int w=suma.getWidth();
                int h=suma.getHeight();
                AffineTransform at=new AffineTransform(0.9*(float)w/width,0.0f,0.0f,0.9*(float)h/height,0.0f,0.0f);
                Font newFont=font.deriveFont(at);
                suma.setFont(newFont);
            }
	    public void componentShown(ComponentEvent arg0) {

            }
}

public class CalcBinaryTest  {
	Label dane;
	MyFrame frame;
        public static void main(String args[]) {
		CalcBinaryTest p = new CalcBinaryTest();
		p.frame = new MyFrame(p);
		p.frame.addKeyListener(p.keyListener);
		p.frame.setFocusable(true); 
		//p.frame.requestFocusInWindow();
		p.frame.setVisible(true);
               }
}

Próbowałem też to wsadzić w CalcBinaryTest ale również nie skutkowało.

0

Przykład do którego odsyłam korzysta z biblioteki Swing (JFrame, JButton). Może w tym jest przyczyna? Nie mogę tego sprawdzić, bo Twój kod wymaga mnóstwa zmian by dał się skompilować.

0

Bardzo możliwe, że to działa dla swing. Głowy nie dam, ale jak zmieniłem na swing, coś tam nieznacznie poprzestawiałem to zaczęło działać. Dzięki:)

Niestety mam problem aby działało to dla Label, który jest zainicjowany w innej klasie niż MyFrame. Tutaj jest kod który się kompiluje:

 
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import javax.swing.*;

class MyWindowAdapter extends WindowAdapter {
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
}

class ButtonSUMAdapt implements ActionListener 
{
	CalcBinaryTest p;

	ButtonSUMAdapt(CalcBinaryTest p) {
		this.p = p;
	}

	public void actionPerformed(ActionEvent e) {
	}
}

class MyFrame extends JFrame implements ComponentListener{
                CalcBinaryTest p;
            private int fontSize=32;
            public Font font=new Font("Helvetica", Font.BOLD, fontSize);
            private int width;
            private int height;
           

            JButton suma = new JButton("+");

            MyFrame(CalcBinaryTest p)
            {
               
                super("Kalkulator Binarny");
               
                setBounds(100, 100, 100, 100);
                setBackground(Color.YELLOW);
                setLayout(new GridLayout(2,1));
                addWindowListener(new MyWindowAdapter());
                p.dane = new JLabel("d");
               // setFont(font);

                //
                p.dane.addComponentListener(this);
                p.dane.setFont(font);
                suma.addComponentListener(this);
                suma.setFont(font);
                suma.setBounds(100,100,30,30);
                add(p.dane);
                add(suma);
                width=suma.getWidth();
                height=suma.getHeight();
                setResizable(true);
             }

            public void componentHidden(ComponentEvent arg0) {

            }

            @Override
            public void componentMoved(ComponentEvent arg0) {

            }
            public void componentResized(ComponentEvent arg0)
            {
                int w=suma.getWidth();
                int h=suma.getHeight();
                AffineTransform at=new AffineTransform(0.9*(float)w/width,0.0f,0.0f,0.9*(float)h/height,0.0f,0.0f);
                Font newFont=font.deriveFont(at);
                suma.setFont(newFont);
               // p.dane.setFont(newFont);

            }
            public void componentShown(ComponentEvent arg0) {

            }
}

public class CalcBinaryTest{
		JLabel dane;
        MyFrame frame;
        private int fontSize2=32;
        public Font font2=new Font("Helvetica", Font.BOLD, fontSize2);
        
        public static void main(String args[]) 
        {
                CalcBinaryTest p = new CalcBinaryTest();
                p.frame = new MyFrame(p);
                p.frame.setVisible(true);
        }

}

Próbowałem z różnych stron zaatakować Label dane, ale nie wychodzi.

Już nieaktualne:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1