Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

zizou666

Image i GridBagLayout

Polecane posty

Witajcie, mam problem z umieszczeniem obrazka w Javie, kiedy używam niestandardowego zarządcy rozkładu GridBagLayout. Otóż wcześniej miałem klasę:

public class ImageComponent extends JComponent
{
    private BufferedImage object;
    
    public ImageComponent(String path)
    {
        try
        {
            object = ImageIO.read(new File(path));
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
    
    public void paintComponent(Graphics a)
    {
        if (object == null) return;
        
        int objectWidth = object.getWidth();
        int objectHeight = object.getHeight();
        
        Graphics2D a2 = (Graphics2D) a;
        a2.drawImage(object,300,10,175,175,null);
        
    }
}

Działało to bardzo dobrze bez ustawiania zarządcy rozkładu. Jednak kiedy chce zastosować coś takiego dla Grida nic nie wyświetla mi się na ekranie. Robię coś takiego:

ImageComponent Image = new ImageComponent(path)
add(Image, new GBC (1,1,5,5)

GBC jest klasą, która dziedziczy po GridBagConstraints, te wartości, które podaje w konstruktorze to po prostu gridx, gridy, gridwidth, gridheight.

Wszelkie panele i buttony dodawane w taki sposób działają dobrze, ale z obrazkiem jest problem.

Domyślam się, że nie działa to bo w metodzie paintComponent ręcznie definiuje położenie obrazka na ekranie, natomiast potem ustawiam je np inaczej już w gridzie. Próbowałem robić różne cuda, ale nic nie działa. Wie ktoś jak to rozwiazać?

Link do komentarza
Udostępnij na innych stronach

Proszę bardzo:

import java.awt.GridBagConstraints;

public class GBC extends GridBagConstraints
{
    public GBC(int gridx, int gridy, int gridwidth, int gridheight)
    {
        this.gridx = gridx;
        this.gridy = gridy;
        this.gridwidth = gridwidth;
        this.gridheight = gridheight;
    }
    
}

Link do komentarza
Udostępnij na innych stronach

Ok, już sobie poradziłem. Trzeba po prostu z obiektu Image lub Buffered Image stworzyć obiekt ImageIcon i dodać go do JLabel uwzględniając ograniczenia GridBagConstraint. Wadą jest fakt, że nie można zmienić rozmiaru obrazka, dlatego trzeba zadbać o to wcześniej poprzez dostosowanie rozdzielczości.

Temat do zamknięcia.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...