Przyczepiony panel

Przyczepiony panel
0

U mnie działa takie coś:

Kopiuj
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame
{
    private Window panel; 
    public static void main(String[] args) 
    {
        new Main();
    }
    //------------------------
    public Main()
    {
        panel=new Window();
        addComponentListener(new ComponentAdapter() 
        {
            public void componentMoved(ComponentEvent e) 
            {
                panel.setVisible(true);
                panel.setLocation(getX() + getWidth(), getY() + ((getHeight() - panel.getHeight()) / 2));
            }           
        });
        //bez poniższego działało trochę źle, po zasłonięciu okna i ponownym odsłonięciu, panel z przyciskami był niewidoczny, konieczne było poruszenie okna lub minimalizacja  
        //i przywrócenie rozmiaru
        addFocusListener(new FocusAdapter() 
        {
            public void focusGained(FocusEvent e) 
            {
                panel.setVisible(true);
                panel.setLocation(getX() + getWidth(), getY() + ((getHeight() - panel.getHeight()) / 2));
            }           
        });          
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(800,600));
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
}

 import javax.swing.*;
 import java.awt.*;
 
 public class Window extends JWindow
 {
    public static void main(String[] args)
    {
        new Window();
    }
    public Window()
    {
        int counter=45; 
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(counter,1,3,3));
        JScrollPane sp = new JScrollPane(panel);
        getContentPane().add(sp);
        setPreferredSize(new Dimension(100,400));
        for (int i = 0; i<counter; i++) 
        {
            panel.add(new JButton(""+(i+1)));
        }
        pack();
        setVisible(true);
    } 
 }
0

To co napisales w komentarzu u mnie nie pomaga. Po dodatkowe okno pojawia sie dopiero gdy poruszę głównym. public MainForm() {
initComponents();
panel = new ThumbPanel();
addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
panel.setVisible(true);
panel.setLocation(getX() + getWidth(), getY() + ((getHeight() - panel.getHeight()) / 2));
}
});
addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
panel.setVisible(true);
panel.setLocation(getX() + getWidth(), getY() + ((getHeight() - panel.getHeight()) / 2));
}
});

Kopiuj

U mnie dziala tylko tak: <code> private void displayThumbs() {       
        int counter=45; 
        thumbPanel.setLayout(new GridLayout(counter,1,3,3));
        //JScrollPane sp = new JScrollPane(thumbPanel);
        //getContentPane().add(sp);
        for (int i = 0; i<counter; i++) 
        {
            thumbPanel.add(new JButton(""+(i+1)));
        }
        pack();
        setVisible(true);
    }

Wyswietla na dodatkowej formie 45 buttonow jeden pod drugim. Gdy odkomentuje te dwie linie to forma dodatkowa w ogole sie nie wyswietla ;/. Panel wrzucilem recznie w Designerze

0

A czy mój kod działa u Ciebie dobrze?

0

Twoj kod (uciebie panel = thumbpanel) private void displayThumbs() {
int counter=45;
thumbPanel.setLayout(new GridLayout(counter,1,3,3));
//JScrollPane sp = new JScrollPane(thumbPanel);
//getContentPane().add(sp);
//setPreferredSize(new Dimension(100,400));
for (int i = 0; i<counter; i++)
{
thumbPanel.add(new JButton(""+(i+1)));
}
pack();
setVisible(true);
}

Kopiuj

Wyswietla 45 przyciskow jeden pod drugim, odkomentowanie 3 linii nie wyswietla dodatkowej formy
0

Nie o to pytam, skompiluj moje klasy Main i Window i uruchom program: java Main.

0

Twoj kod dziala wysmienicie w nowym projekcie ;/

0

Nie mam pojęcia czemu u mnie nie działa ten sam kod ;/

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Twoja przygoda potwierdza moje przekonanie: designery graficzne są do d**y, kod należy pisać.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
0

Ale jak tworze wszystko z kodu to tez nic oprocz zmiany rozmiaru tej przyczepionej formy sie nie dzieje ;/ public class ThumbPanel extends JWindow {

private int countImage;

public ThumbPanel() {
    initComponents();
    countImage = 8;
    JPanel thumbPanel = new JPanel();
    thumbPanel.setLayout(new GridLayout(countImage, 1, 3, 3));
    JScrollPane sp = new JScrollPane(thumbPanel);
    getContentPane().add(sp);
    setPreferredSize(new Dimension(100, 400));
    for (int i = 0; i < countImage; i++) {
        thumbPanel.add(new JButton("" + (i + 1)));
    }
    pack();
    setVisible(true);
}
Kopiuj
0

Edit: Kurde sukces :D pomogla zmiana Layoutu JWindowa na Grid :D
A mozesz powiedziec jak w tej petli for (int i = 0; i < countImage; i++) {
thumbPanel.add(new JButton("" + (i + 1)));
}

Kopiuj

Ustawic dla tych buttonow staly rozmiar np. 40x40?
0

Spróbuj tak

Kopiuj
 for (int i = 0; i < countImage; i++) {
            JButton b=new JButton("" + (i + 1)); 
            b.setPreferredSize(new Dimension(40,40));
            thumbPanel.add(b);
        }
0

Mozesz powiedziec czemu tutaj jest tak: thumbPanel.setLayout(new GridLayout(countImage, 1, 3, 3)); Po co są te trójki dwie?

0

Odstępy między komponentami (w pionie i w poziomie). Odstęp w poziomie nie ma w tym przypadku żadnego znaczenia, ale nie ma konstruktora z trzema parametrami.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.