1

ラベル、テキスト フィールド、およびテキスト領域でいっぱいの FlowLayout が指定されたパネルがあります。フレームはそれほど広くありませんが、内部にすべてのコンポーネントがあるため、パネルは高くなります。パネルを JScrollPane に追加したいので、パネルを垂直方向にスクロールできます。ただし、パネルをスクロール ペインに追加し、スクロール ペインをフレームに追加すると、すべてのコンポーネントが隣り合わせになり、水平方向にスクロールします。コードは次のとおりです。

public class Form {

    JTextField jtfName = new JTextField(15);
    JTextField jtfTitle = new JTextField(15);
    JTextField jtfAuthor = new JTextField(15);

    JTextArea jtaSetting = new JTextArea(5, 15);
    JTextArea jtaMainChars = new JTextArea(5, 15);
    JTextArea jtaConflict = new JTextArea(5, 15);
    JTextArea jtaQuote = new JTextArea(5, 15);
    JTextArea jtaMainCharShows = new JTextArea(5, 15);

    JPanel jpnlName = new JPanel();
    JPanel jpnlTitle = new JPanel();
    JPanel jpnlAuthor = new JPanel();

    Form() {

        // Create a new JFrame container.
        JFrame jfrm = new JFrame("Organizer");

        jfrm.setLayout(new GridLayout(0,1));

        // Give the frame an initial size.
        jfrm.setSize(300, 300);

        // Terminate the program when the user closes the application.
        jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create a panel.
        JPanel jpnl = new JPanel();

        // Create labels.
        JLabel jlabName = new JLabel("Student Name:");
        JLabel jlabTitle = new JLabel("Title:");
        JLabel jlabAuthor = new JLabel("Author:");

        JLabel jlabSetting = new JLabel("Setting (Time and Place):");
        jlabSetting.setHorizontalAlignment(SwingUtilities.CENTER);

        JLabel jlabMainChars = new JLabel("Main Characters:");
        jlabMainChars.setHorizontalAlignment(SwingUtilities.CENTER);

        JLabel jlabConflict = new JLabel("<html>Describe the major conflict of the<br>story in one well-written sentence:");
        jlabConflict.setHorizontalAlignment(SwingUtilities.CENTER);

        JLabel jlabQuote = new JLabel("<html>Find and write down a passage (quote<br>from the book that reveals a significant<br>personality trait of one of the main characters<br>and GIVE THE PAGE #:");
        jlabQuote.setHorizontalAlignment(SwingUtilities.CENTER);

        JLabel jlabMainCharShows = new JLabel("<html>Explain in your own words what the<br>passage (quote) shows about the main character.");
        jlabMainCharShows.setHorizontalAlignment(SwingUtilities.CENTER);

        // Add text fields to panel.
        jpnlName.add(jlabName);
        jpnlName.add(jtfName);

        jpnlTitle.add(jlabTitle);
        jpnlTitle.add(jtfTitle);

        jpnlAuthor.add(jlabAuthor);
        jpnlAuthor.add(jtfAuthor);

        // Add components to main panel.
        jpnl.add(jpnlName);
        jpnl.add(jpnlTitle);
        jpnl.add(jpnlAuthor);
        jpnl.add(jlabSetting);
        jpnl.add(jtaSetting);
        jpnl.add(jlabMainChars);
        jpnl.add(jtaMainChars);
        jpnl.add(jlabConflict);
        jpnl.add(jtaConflict);
        jpnl.add(jlabQuote);
        jpnl.add(jtaQuote);
        jpnl.add(jlabMainCharShows);
        jpnl.add(jtaMainCharShows);

        // Add the panel to a scroll pane.
        JScrollPane jspPanel = new JScrollPane(jpnl);

        // Add the scroll pane to the frame.
        jfrm.getContentPane().add(jspPanel);

        // Display the frame.
        jfrm.setVisible(true);
    }
}
4

2 に答える 2

1

あなたが望むレイアウトを正確に知らなくても、私が提案できる最善の解決策は、WrapLayoutを試すことです

の主要な問題に対処しますが、FlowLayoutラップしません。

于 2012-08-17T22:59:01.747 に答える
0

BoxLayoutを試してみませんか:

jpnl.setLayout(new BoxLayout(jpnl, BoxLayout.PAGE_AXIS));
于 2012-08-18T00:26:16.103 に答える