1

JFrame JSrollPane に追加したいです。ScrollPane には JPanels が含まれています。しかし、最初の JPanel を ScrollPane に追加すると問題が発生します。JPanel を JFrame に追加すると、JPanel が表示されます。では、どこで間違いを犯しますか?ここにコード:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class AddingJPanels {

    public static void main(String... args) {
        JFrame jF = new JFrame();
        PanelMain pM = new PanelMain();

        Panel p = new Panel("sas");
        JPanel jp = makeJPanel(10);
        p.setPreferredSize(new Dimension(600,600));
        JScrollPane scroll = new JScrollPane();
        scroll.add(jp);
        JScrollBar verticalPane = scroll.getVerticalScrollBar();
        verticalPane.setValue(verticalPane.getMinimum());
        verticalPane.setValue(20);
        //scroll.setPreferredSize(new Dimension(570, 300));
        scroll.setPreferredSize(new Dimension(400,500));
        pM.add(scroll);
        //JTabbedPane tB = new JTabbedPane();
        //tB.addTab(":]", null, pM, "Tab 3");
        jF.add(jp);
        jF.setSize(new Dimension(500,500));
        jF.setVisible(true);
    }






    static JPanel makeJPanel(int i){
        JPanel jPl = new JPanel();
        jPl.setLayout(new GridLayout(i,0));
        JLabel lebel;

        for(int j=0;j<i;++j){
            JPanel p = new JPanel();
            p.setLayout(new GridLayout(2,2));
            JButton b = new JButton("asa");
            p.add(b);
            p.setBorder(BorderFactory.createLineBorder(Color.black));
            p.setPreferredSize(new Dimension(400,400));
            lebel = new JLabel("Napis: "+j);
            p.add(lebel);
            JTextField jTF = new JTextField("Nic",20);
            p.add(jTF);
            jPl.add(p);
        }
        return jPl;
    }
}

class Frame extends JFrame {
    public Frame() {
        super("Frame");
        this.setPreferredSize(new Dimension(200, 200));

    }

    public void see() {
        this.setVisible(true);
    }
}

class PanelMain extends JPanel {
    JButton b = new JButton("press me");

    public PanelMain() {
        this.add(b);
        b.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                System.out.println("Pressed");
            }

        });
    }
}

class Panel extends JPanel {
    JLabel l;

    public Panel(String s) {
        l = new JLabel(s);
        this.add(l);
    }
}

jF.add(scroll) を作成しても効果はありません。

4

3 に答える 3

2

add() は JScrollPane では機能しません。setViewport() を使用するか、コンストラクターでコンポーネントを渡す必要があります。

JScrollPane scroll = new JScrollPane(jp);

また

JScrollPane scroll = new JScrollPane();
scroll.setViewport(jp);
于 2013-06-27T11:47:41.603 に答える
1

使用する:

scroll.setViewportView(jp);
于 2013-06-27T11:45:30.450 に答える
1
JScrollPane scroll = new JScrollPane(jp);
于 2013-06-27T11:42:50.660 に答える