1

Im having trouble getting Swing layouts to do what I want. I want the Center panel which contains two JEditorPanes to scroll when it contains 'n' Panes of equal (fixed) height.
I've been playing around in Netbean's UI designer to try to get it to work
jPanel3 is the center panel
jEditorPane4 and 5 are some example editor panes (these will hold comments)

public class GBugForm1 extends javax.swing.JFrame {

public static void main(String[] args)
{
    GBugForm1 form;
    form = new GBugForm1();
    form.setDefaultCloseOperation(javax.swing.JDialog.DISPOSE_ON_CLOSE);
    form.setSize(500,500);
    form.setVisible(true);
}

/**
 * Creates new form GBugForm
 */
public GBugForm1() {
    initComponents();
}

/**
 * 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() {

    jPanel1 = new javax.swing.JPanel();
    jPanel3 = new javax.swing.JPanel();
    jScrollPane6 = new javax.swing.JScrollPane();
    jEditorPane4 = new javax.swing.JEditorPane();
    jScrollPane4 = new javax.swing.JScrollPane();
    jEditorPane5 = new javax.swing.JEditorPane();
    jPanel4 = new javax.swing.JPanel();
    jPanel2 = new javax.swing.JPanel();

    setPreferredSize(new java.awt.Dimension(500, 460));
    setLayout(new java.awt.BorderLayout());

    jPanel1.setLayout(new java.awt.BorderLayout());

    jPanel3.setLayout(new javax.swing.BoxLayout(jPanel3, javax.swing.BoxLayout.PAGE_AXIS));

    jEditorPane4.setPreferredSize(new java.awt.Dimension(106, 200));
    jScrollPane6.setViewportView(jEditorPane4);

    jPanel3.add(jScrollPane6);

    jScrollPane4.setViewportView(jEditorPane5);

    jPanel3.add(jScrollPane4);

    jPanel1.add(jPanel3, java.awt.BorderLayout.CENTER);

    jPanel4.setPreferredSize(new java.awt.Dimension(492, 105));

    javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
    jPanel4.setLayout(jPanel4Layout);
    jPanel4Layout.setHorizontalGroup(
        jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 500, Short.MAX_VALUE)
    );
    jPanel4Layout.setVerticalGroup(
        jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 105, Short.MAX_VALUE)
    );

    jPanel1.add(jPanel4, java.awt.BorderLayout.PAGE_START);

    add(jPanel1, java.awt.BorderLayout.CENTER);

    jPanel2.setPreferredSize(new java.awt.Dimension(400, 40));

    javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
    jPanel2.setLayout(jPanel2Layout);
    jPanel2Layout.setHorizontalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 500, Short.MAX_VALUE)
    );
    jPanel2Layout.setVerticalGroup(
        jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 40, Short.MAX_VALUE)
    );

    add(jPanel2, java.awt.BorderLayout.SOUTH);
}// </editor-fold>

// Variables declaration - do not modify
private javax.swing.JEditorPane jEditorPane4;
private javax.swing.JEditorPane jEditorPane5;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane4;
private javax.swing.JScrollPane jScrollPane6;
// End of variables declaration
}
4

1 に答える 1

4

これがあなたのさらなる努力を導くかもしれないsscceです。各パネルの推奨サイズは、スクロールバーを強制的に表示するように指定されています。同様に、フレームの全体的なサイズはpack()、外側のスクロールバーを強制的に表示するように設定されます(後)。詳細については、このQ&Aを参照してください。RFC2606準拠のURLの使用にも注意してください。

余談ですが、GUIエディターに頼りすぎる前に 、おそらくレイアウトを検討する必要があります。

画像

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

/**
 * @see https://stackoverflow.com/a/12827643/230513
 * @see https://stackoverflow.com/questions/4755524
 */
public class HtmlView extends JPanel {

    private static final String EXAMPLE = "http://www.example.com";
    private final JEditorPane jep;

    public HtmlView(String url) {
        super(new GridLayout(1, 1));
        jep = new JEditorPane();
        try {
            jep.setPage(EXAMPLE);
        } catch (IOException ioe) {
            ioe.printStackTrace(System.err);
        }
        jep.setEditable(false);
        this.add(new JScrollPane(jep));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(600, 200);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JPanel panel = new JPanel(new GridLayout(0, 1));
                panel.add(new HtmlView(EXAMPLE));
                panel.add(new HtmlView(EXAMPLE));
                panel.add(new HtmlView(EXAMPLE));
                f.add(new JScrollPane(panel));
                f.pack();
                f.setSize(640, 480);
                f.setVisible(true);
            }
        });
    }
}
于 2012-10-10T20:19:17.983 に答える