JScrollPane滚动条在窗口大小调整时消失

时间:2015-06-10 01:48:25

标签: java swing jscrollpane jeditorpane

这是尝试让两个JEditorPane组件共享一个公共滚动条并显示通过URL获取的相同内容。但是,我正面临着这些挑战:

     
  1. JEditorPane 翻译(右一)未获取HTML内容 helpURL (常见预期)。
  2. 编辑:一次两个和一个中的任何一个都显示正确的内容,而且没有抛出任何异常。  
  3. 在调整窗口大小时,滚动条(到最外面的JScrollPane panelScrollPane )消失。
  4. Fot tl; dr:在myInitComponents方法和fetchURL方法中的内容设置中查找滚动条策略。

    package test;
    import java.net.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.text.html.HTMLEditorKit;
    
    public class URLReader extends javax.swing.JFrame {
        /**
         * Creates new form URLReader
         */
        public URLReader() {
            initComponents();
            myInitComponents();
        }
    
        /**
         * This method is called from within the constructor to initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is always
         * regenerated by the Form Editor.
         */
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
    
            panelScrollPane = new javax.swing.JScrollPane();
            contentPanel = new javax.swing.JPanel();
            leftScrollPane = new javax.swing.JScrollPane();
            content = new javax.swing.JEditorPane();
            rightScrollPane = new javax.swing.JScrollPane();
            translation = new javax.swing.JEditorPane();
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
            contentPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Content Panel", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 12))); // NOI18N
    
            leftScrollPane.setBorder(javax.swing.BorderFactory.createTitledBorder("Content"));
    
            content.setContentType("text/html"); // NOI18N
            content.setAutoscrolls(false);
            leftScrollPane.setViewportView(content);
    
            rightScrollPane.setBorder(javax.swing.BorderFactory.createTitledBorder("Translation"));
            rightScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    
            translation.setContentType("text/html"); // NOI18N
            rightScrollPane.setViewportView(translation);
    
            javax.swing.GroupLayout contentPanelLayout = new javax.swing.GroupLayout(contentPanel);
            contentPanel.setLayout(contentPanelLayout);
            contentPanelLayout.setHorizontalGroup(
                contentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(contentPanelLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(leftScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 345, Short.MAX_VALUE)
                    .addGap(18, 18, 18)
                    .addComponent(rightScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 296, Short.MAX_VALUE)
                    .addContainerGap())
            );
            contentPanelLayout.setVerticalGroup(
                contentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(contentPanelLayout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(contentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(leftScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE)
                        .addComponent(rightScrollPane))
                    .addContainerGap())
            );
    
            panelScrollPane.setViewportView(contentPanel);
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(panelScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 710, Short.MAX_VALUE)
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(panelScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE)
                    .addGap(12, 12, 12))
            );
    
            pack();
        }// </editor-fold>                        
    
    
        private void myInitComponents(){
            leftScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
            leftScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    
            rightScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
            rightScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    
            panelScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            panelScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    
            /*
            content.setLineWrap(true);
            content.setWrapStyleWord(true);
    
            translation.setLineWrap(true); 
            translation.setWrapStyleWord(true);
            */
        }
    
        private void fetchURL(String url){
            try{
                // URL(URL baseURL[, String relativeURL])
                URL helpURL = new URL(url);
                this.content.setPage(helpURL);
                this.translation.setPage(helpURL);
            }
            catch (IOException e) {
                System.err.println("Attempted to read a bad URL: " + url);
            }
            // return this.content;
        }
    
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            /* Set the Nimbus look and feel */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(URLReader.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(URLReader.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(URLReader.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(URLReader.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>
    
            /* Create and display the form */
            java.awt.EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    String url = "http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0";
                    URLReader reader = new URLReader();
                    reader.fetchURL(url);
                    reader.setVisible(true);
                }
            });
        }
    
        // Variables declaration - do not modify                     
        private javax.swing.JEditorPane content;
        private javax.swing.JPanel contentPanel;
        private javax.swing.JScrollPane leftScrollPane;
        private javax.swing.JScrollPane panelScrollPane;
        private javax.swing.JScrollPane rightScrollPane;
        private javax.swing.JEditorPane translation;
        // End of variables declaration                   
    }
    

    P.S。:我正在传递完整的代码(NetBeans IDE)以获得更好的视角,如果不合适,请直接这样,我会尽量缩短它。感谢。

0 个答案:

没有答案