1

一連のラベルと TextField を含む Panel を持ち、Spring レイアウト (これは mainPanel) と、ボタン (buttonPanel) だけを含む別の Panel を使用する GUI があります。mainPanel にも垂直スクロールバーを持たせようとしています。JFrame 内に 2 つのパネルがあるように GUI を実装したいと思います。mainPanel はフレームの上部に表示され、buttonPanel は mainPanel の下に表示されます。

私の問題は、buttonPanel が mainPanel の下にあるようにパネルを表示することができず、mainPanel にスクロールバーを追加する方法もわかりません。どんな助けでも大歓迎です。

編集: JPanels に関する問題を解決できましたが、私の唯一の問題は、mainPanel をスクロールできないことです。以下に最新のコードを追加しました。

これが私がこれまでに持っているコードです:

public static void main(String args[]) {


            JFrame frame = new JFrame("SpringLayout");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JScrollPane scroll = new JScrollPane();
            Container contentPane = frame.getContentPane();

           JButton next = new JButton("Next");
           JPanel buttonPanel = new JPanel();
           buttonPanel.add(next);
            SpringLayout layout = new SpringLayout();
            JPanel mainPanel = new JPanel();
            mainPanel.setLayout(layout);
            contentPane.setLayout(new BorderLayout());


            int j = 25;
            for(int i =0;i<150;i++){
                JLabel label = new JLabel("Enter Name " + i );
                JTextField text = new JTextField(15);

            mainPanel.add(label);
            mainPanel.add(text);
            layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST,
                            contentPane);
            layout.putConstraint(SpringLayout.NORTH, label, j, SpringLayout.NORTH,
                            contentPane);
            layout.putConstraint(SpringLayout.NORTH, text, j, SpringLayout.NORTH,
                            contentPane);
            layout.putConstraint(SpringLayout.WEST, text, 20, SpringLayout.EAST,
                            label);
            j+=30;
            }
            //mainPanel.setSize(500,800);
            scroll.setPreferredSize(new Dimension(500,500));
            scroll.setViewportView(mainPanel);
            contentPane.add(scroll);
            contentPane.add(buttonPanel,BorderLayout.SOUTH);
            //mainWindow.add(contentPane);
            frame.setSize(500, 600);
            frame.setVisible(true);



        }
4

3 に答える 3

3

スクロール可能にするには、スクロールバーよりも大きくなるように mainPanel の優先サイズを大きくする必要がありました。

 public static void main(String args[]) {
                JFrame frame = new JFrame("SpringLayout");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JScrollPane scroll = new JScrollPane();
                Container contentPane = frame.getContentPane();

               JButton next = new JButton("Next");
               JPanel buttonPanel = new JPanel();
               buttonPanel.add(next);
                SpringLayout layout = new SpringLayout();
                JPanel mainPanel = new JPanel();
                mainPanel.setLayout(layout);
                contentPane.setLayout(new BorderLayout());


                int j = 25;
                for(int i =0;i<18;i++){
                    JLabel label = new JLabel("Enter Name " + i );
                    JTextField text = new JTextField(15);

                mainPanel.add(label);
                mainPanel.add(text);
                layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST,
                                contentPane);
                layout.putConstraint(SpringLayout.NORTH, label, j, SpringLayout.NORTH,
                                contentPane);
                layout.putConstraint(SpringLayout.NORTH, text, j, SpringLayout.NORTH,
                                contentPane);
                layout.putConstraint(SpringLayout.WEST, text, 20, SpringLayout.EAST,
                                label);
                j+=30;
                }
                mainPanel.setPreferredSize(new Dimension(mainPanel.getWidth(), 1500));
                scroll.setPreferredSize(new Dimension(500,500));
                scroll.setViewportView(mainPanel);
                contentPane.add(scroll);
                contentPane.add(buttonPanel,BorderLayout.SOUTH);
                //mainWindow.add(contentPane);
                frame.setSize(500, 600);
                frame.setVisible(true);
        }
于 2012-10-23T15:08:44.183 に答える
1
  • 私は何かをコメントして比較することはできません

  • 現時点では、理由がわからず、に基づいて適切な GUI を構築していないことに注意してくださいSpringLayoutJFrame#pack()PreferredSize

JFrame.setSize()適切なコードではなくハードコードされたコードJFrame#pack()

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.SwingUtilities;

public class Main {

    public Main() {
        JFrame frame = new JFrame("SpringLayout");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton next = new JButton("Next");
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(next);
        SpringLayout layout = new SpringLayout();
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(layout);
        int j = 25;
        for (int i = 0; i < 5; i++) {
            JLabel label = new JLabel("Enter Name");
            JTextField text = new JTextField(15);
            layout.putConstraint(SpringLayout.WEST, label, 10, SpringLayout.WEST,
                    mainPanel);
            layout.putConstraint(SpringLayout.NORTH, label, j, SpringLayout.NORTH,
                    mainPanel);
            layout.putConstraint(SpringLayout.NORTH, text, j, SpringLayout.NORTH,
                    mainPanel);
            layout.putConstraint(SpringLayout.WEST, text, 20, SpringLayout.EAST,
                    label);
            j += 30;
            mainPanel.add(label);
            mainPanel.add(text);
        }
        frame.add(mainPanel, BorderLayout.CENTER);
        frame.add(buttonPanel, BorderLayout.SOUTH);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }

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

            @Override
            public void run() {
                 Main mn = new Main();
            }
        });
    }
}
于 2012-10-23T14:02:45.917 に答える
0

これは私がそれを行う方法です:

public static void main(String args[]) {
    JFrame frame = new JFrame("SpringLayout");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container contentPane = frame.getContentPane();

    JButton next = new JButton("Next");
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(next);
    GridBagLayout layout = new GridBagLayout();
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(layout);
    contentPane.setLayout(new BorderLayout());

    GridBagConstraints gbc = new GridBagConstraints();

    int j = 25;
    for (int i = 0; i < 50; i++) {
        JLabel label = new JLabel("Enter Name (" + i + ")");
        JTextField text = new JTextField(15);

        gbc.gridx = 0;
        gbc.gridy = i;

        mainPanel.add(label, gbc);

        gbc.gridx = 1;
        mainPanel.add(text, gbc);
    }
    contentPane.add(new JScrollPane(mainPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
    contentPane.add(buttonPanel, BorderLayout.SOUTH);
    frame.setSize(500, 800);
    frame.setVisible(true);
}

いくつかの変更: * SpringLayout の代わりに GridBagLayout を使用します (SpringLayout を知らないため) * mainPanel を JScrollPane 内にラップします

あなたの例とまったく同じように見えません。GridBagConstraints は調整できます。

于 2012-10-23T14:01:56.450 に答える