Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    JScrollPane non scrolla

    ho questo jframe con dentro un jpanel, un jscrollpane e un jbutton.
    il jpanel ha come sfondo una immagine totale del desktop.
    teoricamente quindi il jpanel dovrebbe essere più grande del proprio contenitore.
    però nn scrolla:
    codice:
    public class DrawPanel extends JFrame {
    
        private JButton button;
        private JScrollPane scroll;
    
        public DrawPanel(String path) {
            super("Draw panel");
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            setLayout(new BorderLayout());
            button = new JButton("Capture");
            imagePanel panel = new imagePanel(path);
            scroll = new JScrollPane();
            scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
            scroll.setViewportView(panel);
            add(scroll, BorderLayout.CENTER);
            add(button, BorderLayout.SOUTH);
        }
    
        private class imagePanel extends JPanel implements MouseListener, MouseMotionListener {
    
            private BufferedImage buff;
            private Rectangle currentRect;
            private String fileDelete;
            private int xx = 0;
            private int yy = 0;
            private int w = 0;
            private int h = 0;
    
            public imagePanel(String path) {
                setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
                fileDelete = path;
                try {
                    buff = ImageIO.read(new File(path));
                    button.addActionListener(new ActionListener() {
    
                        public void actionPerformed(ActionEvent e) {
                            capture(e);
                        }
                    });
    .........
    il jframe è richiamato da un'altra classe e si avvia massimizzato:
    codice:
            DrawPanel panel = new DrawPanel(percorso);    
            panel.setVisible(true);
            panel.setExtendedState(JFrame.MAXIMIZED_BOTH);
    ho cercato anche su un libro che ho a casa e già ho scritto più codice degli esempi.

  2. #2
    nessuno ha qualche idea??

  3. #3
    Ciao,
    prova ad usare il seguente metodo per inserire il panello nello scrool pane:
    scroll.getViewport().add

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Oppure, perchè non usare direttamente il costruttore di JScrollPane che prende come argomento in Component da visualizzare?

    codice:
    scroll = new JScrollPane( panel );
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Originariamente inviato da francesco.muia
    Ciao,
    prova ad usare il seguente metodo per inserire il panello nello scrool pane:
    scroll.getViewport().add
    ciao!
    purtroppo stesso risultato.
    sicuramente c'è qualcosa che sbaglio/mi manca.

  6. #6
    Originariamente inviato da LeleFT
    Oppure, perchè non usare direttamente il costruttore di JScrollPane che prende come argomento in Component da visualizzare?

    codice:
    scroll = new JScrollPane( panel );
    Ciao.
    come dici te avevo già provato.
    è stato il primo tentativo.
    nn c'è niente da fare: sto cavolo di pannello nn scrolla!!!!

  7. #7
    Guarda questo esempio ufficiale: Creare immagine scrollabile.
    Forse è la soluzione al tuo problema.

  8. #8
    ho provato apportando alcune modifiche.
    ho impostato la dimensione del frame minore rispetto a quella del panel e dello scrollpane.
    inoltre ho usato il metodo verticalScrollBar passandogli una JScrollBar.
    ma nada:
    codice:
    public class DrawPanel extends JFrame {
    
        private JButton button;
        private JScrollPane scroll;
        private int width = (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
        private int height = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    
        public DrawPanel(String path) {
            super("Draw panel");
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            setLayout(new BorderLayout());
            setSize(500, 500);
            button = new JButton("Capture");
            imagePanel panel = new imagePanel(path);
            scroll = new JScrollPane(panel);
            scroll.setVerticalScrollBar(new JScrollBar(JScrollBar.VERTICAL));
            scroll.setSize(width, height);
            add(scroll, BorderLayout.CENTER);
            add(button, BorderLayout.SOUTH);
        }
    
        private class imagePanel extends JPanel implements MouseListener, MouseMotionListener {
    
            private BufferedImage buff;
            private Rectangle currentRect;
            private String fileDelete;
            private int xx = 0;
            private int yy = 0;
            private int w = 0;
            private int h = 0;
    
            public imagePanel(String path) {
                setLayout(new BorderLayout());
                setSize(width, height);
                fileDelete = path;
                try {
                    buff = ImageIO.read(new File(path));
                    button.addActionListener(new ActionListener() {
    
                        public void actionPerformed(ActionEvent e) {
                            capture(e);
                        }
                    });
                    addMouseListener(this);
                    addMouseMotionListener(this);
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(null, ex.getMessage());
                }
            }
    ..............
    Originariamente inviato da VincenzoTheBest
    Guarda questo esempio ufficiale: Creare immagine scrollabile.
    Forse è la soluzione al tuo problema.
    ho fatto qualche tentativo guardando quella pagina.
    per ora nn sono riuscito nell'intento.
    nn so se è dovuto al fatto che ho sbagliato io o al fatto che la una JLabel mentre io un JPanel.

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non devi impostare la dimensione ( setSize() ), ma il PreferredSize nel JPanel che andrà dentro allo ScrolPane.

    codice:
    public imagePanel(String path) {
       setLayout(new BorderLayout());
       setSize(width, height);
       ...
    }
    Sostituisci la parte in grassetto con:

    codice:
    setPreferredSize( new Dimension(width, height) );
    PS: dovresti cercare di aderire alle convenzioni sulla nomenclatura Java. I nomi delle classi vanno con l'iniziale Maiuscola.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    grazie così funziona finalmente!!
    lo sapevo che era una cretinata.
    però sinceramente nn ho capito la differenza tra setSize e setPreferredSize.
    per quale motivo cambia di così tanto il comportamento?
    e quando dovrei usare uno e l'altro?
    sul mio libro nn c'è scritto.

    PS: si in genere metto la prima maiuscola, qua mi sono dimenticato.
    grazie per il suggerimento.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.