elementy Swing po skalowaniu Graphics2D.scale(int a, int b)

0

Witajcie,

Próbuję przeskalować panel w którym jest zarówno grafika, jak i elementy Swing. Niestety jest problem z tymi ostatnimi.
Przestają one prawidło się wyświetlać. Pewnie robię coś źle, ale nie wiem co i jak to poprawić.
Zla zilustrowania problemu załączam kod; jest tu kwadrat, przycisk i pole tekstowe, które chcę powiększyć
Bardzo proszę o pomoc:

 
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Test{
    public static void main(String args[]){
        EventQueue.invokeLater(new Runnable(){public void run(){
            JFrame ramka=new JFrame();
            ramka.setSize(300,200);
            ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            ramka.add(new panel());
            ramka.setVisible(true);
        }});
    }
}

class panel extends JPanel{
    panel(){
        add(new JTextField("Test"));
        add(new JButton("Test"));
    }
    
    public void paintComponent(Graphics g){
        Graphics2D g2=(Graphics2D)g;
        g2.scale(1.5, 1.5);
        g2.drawRect(50,50,10,10);
    }    
}
0

na pierwszy rzut widzę że chcesz dodać dwa komponenty, więc zastosowałbym tu jakiś menedżer rozkładu :)

0
remigio napisał(a)

na pierwszy rzut widzę że chcesz dodać dwa komponenty, więc zastosowałbym tu jakiś menedżer rozkładu :)

domyślnie jest tu FlowLayout, choć mnie akurat interesuje ręczne usawianie każdego komponentu. Przy layout null, też źle wychodzi

0

Border layout będzie dobry tylko grafikę ustaw na center jeśli po bokach nic nie masz bo ci nie wyświetli :)

0
szypxx napisał(a)

Border layout będzie dobry tylko grafikę ustaw na center jeśli po bokach nic nie masz bo ci nie wyświetli :)

niestety nie będzie dobry. Muszę mieć z 20 elementów, które znajdują się w odpowiednim miejscu na grafice. Np tło to jakiś dokument z pliku jpg, a JTextField przechowuje nazwisko, które musi znaleźć się w odpowiednim miejscu tego dokumentu. Dla tego rezygnuję całkiem z rozkładów i ustawiam ręcznie.

Dorzucam przerobiony nieco kod:

import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class Test{
    public static void main(String args[]){
        EventQueue.invokeLater(new Runnable(){public void run(){
            JFrame ramka=new JFrame();
            ramka.setSize(300,200);
            ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            ramka.add(new panel());
            ramka.setVisible(true);
        }});
    }
}

class panel extends JPanel{
    panel(){
        this.setLayout(null);
        JTextField tekst=(new JTextField("Test"));
        tekst.setBounds(40, 40, 50, 30);
        add(tekst);
        
        JButton przycisk=new JButton("Test");
        przycisk.setBounds(100, 40, 70, 30);
        add(przycisk);
    }
 
    public void paintComponent(Graphics g){
        Graphics2D g2=(Graphics2D)g;
        g2.scale(1.5, 1.5);
        g2.drawRect(50,50,10,10);
    }    
} 
0

szypxx: słyszałem o GridBagLayout i właśnie sprawdziłem, ze stosując ten rozkład też wychodzi źle.:(
żle jest również dla rozkładu grupowego.

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