Visualizzazione dei risultati da 1 a 4 su 4

Discussione: JSplitPane scrollabili

  1. #1

    JSplitPane scrollabili

    ciao!

    vorrei creare una finestra con uno JSplitPane con:
    - a sinistra un JPanel con alcuni dettagli presi da un metodo
    - a destra un JPanel con una immagine

    il problema è che i due JPanel non sono scrollabili, e di conseguenza devo massmizzare il JFrame per vedere tutto bene (ad esempio l'immagine che magari è parecchio grande).

    siccome i due JPanel potrebbero essere riutilizzati singolarmente, ho pensato di crearli indipendenti.
    quindi a sinistra questo:
    codice:
    public class PanelDetail extends JPanel {
    
        private final File file;
        private JScrollPane panel;
        private JTextArea area;
    
        public PanelDetail(File file) {
            super();
            this.file = file;
            createGui();
            parseFile();
        }
    
        private void createGui() {
            area = new JTextArea();
            panel = new JScrollPane(area, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            area.setEditable(false);
            setLayout(new BorderLayout());
            add(panel, BorderLayout.CENTER);
        }
    
    .................................
    }
    a destra questo:
    codice:
    public class PanelImage extends JPanel {
    
        private BufferedImage image;
        private int w;
        private int h;
    
        public PanelImage(File file) {
            try {
                image = ImageIO.read(file);
                w = image.getWidth();
                h = image.getHeight();
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
        }
    
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(w, h);
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }
    
    }
    questo il JFrame che contiene il JSplitPane:
    codice:
    public class WindowImage extends JFrame {
    
        private final File file;
        private PanelDetail left;
        private JPanel right;
        private JSplitPane splitPane;
    
        public WindowImage(File file) {
            super("Dettaglio immagine");
            this.file = file;
            createGui();
        }
    
        private void createGui() {
            setPreferredSize(new Dimension(800, 500));
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            setLayout(new FlowLayout());
            left = new PanelDetail(file);
            right = new PanelImage(file);
            splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
            splitPane.setOneTouchExpandable(true);
            add(splitPane);
            pack();
            setLocationRelativeTo(null);
    
            getRootPane().registerKeyboardAction(e -> {
                dispose();
            }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
        }
    }
    come faccio a rendere i due JPanel scrollabili (come in questa immagine per intenderci https://docs.oracle.com/javase/tutor...tpane.html)???

  2. #2
    ok allora, ho fatto questa modifica:
    codice:
    public class WindowImage extends JFrame {
    
        private final File file;
        private PanelDetail left;
        private JPanel right;
        private JSplitPane splitPane;
    
        public WindowImage(File file) {
            super("Dettaglio immagine");
            this.file = file;
            createGui();
        }
    
        private void createGui() {
            setPreferredSize(new Dimension(800, 500));
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            left = new PanelDetail(file);
            right = new PanelImage(file);
            splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
            splitPane.setOneTouchExpandable(true);
            splitPane.setDividerLocation(0.5);
            splitPane.setResizeWeight(0.5);
            add(splitPane);
            pack();
            setLocationRelativeTo(null);
    
            getRootPane().registerKeyboardAction(e -> {
                dispose();
            }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
        }
    }
    levato il FlowLayout.
    adesso il JPanel di sinistra è scrollabile, ma quello di destra no
    Ultima modifica di fermat; 16-06-2016 a 17:06

  3. #3
    ok mi è bastato usare lo JScrollPane.
    così funziona:
    codice:
    public class WindowImage extends JFrame {
    
        private final File file;
        private PanelDetail left;
        private JScrollPane right;
        private JSplitPane splitPane;
    
        public WindowImage(File file) {
            super("Dettaglio immagine");
            this.file = file;
            createGui();
        }
    
        private void createGui() {
            setPreferredSize(new Dimension(800, 500));
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            left = new PanelDetail(file);
            right = new JScrollPane(new PanelImage(file), JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
            splitPane.setOneTouchExpandable(true);
            splitPane.setDividerLocation(0.5);
            splitPane.setResizeWeight(0.5);
            add(splitPane);
            pack();
            setLocationRelativeTo(null);
    
            getRootPane().registerKeyboardAction(e -> {
                dispose();
            }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
        }
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ma quello di destra no
    Il PanelImage è direttamente dentro il JSplitPane. Metti in mezzo un JScrollPane.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.