Problem z scrollpane

0

Stworzyłem GUI oparte na panelu, na którym mam różne przyciski, labelki itd...
Chciałbym do tego jeszcze dodać JListę z scrollpanelami, ale panel ma layout(null) // żebym mógł dowolnie poukładać klawisze
Problem w tym, że scrollpanele nie działają na tym layoucie. Jak rozwiązać taki problem?
Dodam listing programu, tak na wszelki wypadek:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Fasada extends JFrame{

        private JButton JB_Aa;
        private JButton JB_abc;
        private JButton JB_def;
        private JButton JB_ghi;
        private JButton JB_jkl;
        private JButton JB_mno;
        private JButton JB_pqr;
        private JButton JB_tuv;
        private JButton JB_wxyz;
        private JButton JB_Wyczysc;
        private JButton JB_Dodaj;
        private JButton JB_Usun;

        private JTextArea JTA_wpisz;

    public Fasada()
    {

        ActionListener al = new ActionListener() {  
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==JB_Dodaj){

            }
    }};

    setSize(480, 500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   

    JPanel okno=new JPanel();
    okno.setLayout(null);

    JTA_wpisz = new JTextArea();
    JTA_wpisz.setBounds(20, 20, 200, 40);

    //Tworzenie wszystkich klawiszy okna i nadanie im parametrów

    JB_Dodaj = new JButton("+");
    JB_Dodaj.setBounds(240, 180, 50, 20);
    JB_Dodaj.addActionListener(al);

    JB_Usun = new JButton("-");
    JB_Usun.setBounds(290, 180, 50, 20);
    JB_Usun.addActionListener(al);

    JB_Wyczysc = new JButton("Czyść");
    JB_Wyczysc.setBounds(340, 180, 70, 20);
    JB_Wyczysc.addActionListener(al);

    JB_Aa = new JButton("A/a");
    JB_Aa.setBounds(20, 80, 60, 20);
    JB_Aa.addActionListener(al);

    JB_abc = new JButton("abc");
    JB_abc.setBounds(20, 120, 60, 20);
    JB_abc.addActionListener(al);

    JB_def = new JButton("def");
    JB_def.setBounds(85, 120, 60, 20);
    JB_def.addActionListener(al);

    JB_ghi = new JButton("ghi");
    JB_ghi.setBounds(150, 120, 60, 20);
    JB_ghi.addActionListener(al);

    JB_jkl = new JButton("jkl");
    JB_jkl.setBounds(20, 150, 60, 20);
    JB_jkl.addActionListener(al);

    JB_mno = new JButton("mno");
    JB_mno.setBounds(85, 150, 60, 20);
    JB_mno.addActionListener(al);

    JB_pqr = new JButton("pqr");
    JB_pqr.setBounds(150, 150, 60, 20);
    JB_pqr.addActionListener(al);

    JB_tuv = new JButton("tuv");
    JB_tuv.setBounds(52, 180, 60, 20);
    JB_tuv.addActionListener(al);

    JB_wxyz = new JButton("wxyz");
    JB_wxyz.setBounds(117, 180, 65, 20);
    JB_wxyz.addActionListener(al);

      okno.add(JTA_wpisz);

      okno.add(JB_Dodaj);
      okno.add(JB_Usun);
      okno.add(JB_Wyczysc);
      okno.add(JB_Aa);
      okno.add(JB_abc);
      okno.add(JB_def);
      okno.add(JB_ghi);
      okno.add(JB_jkl);
      okno.add(JB_mno);
      okno.add(JB_pqr);
      okno.add(JB_tuv);
      okno.add(JB_wxyz);

      setContentPane(okno);
      setVisible(true);

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

}
0

Nie widzę byś tworzył ScrollPane. Spróbuj zamienić

setContentPane(okno);

na

setContentPane(new JScrollPane(okno));
0

Nie pomogło. Dodałem do listingu listę i jej scrolpane, żeby po skompilowaniu zobaczyć, w czym problem.

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Fasada extends JFrame{

    private JButton JB_Aa;
    private JButton JB_abc;
    private JButton JB_def;
    private JButton JB_ghi;
    private JButton JB_jkl;
    private JButton JB_mno;
    private JButton JB_pqr;
    private JButton JB_tuv;
    private JButton JB_wxyz;
    private JButton JB_Wyczysc;
    private JButton JB_Dodaj;
    private JButton JB_Usun;

    private JTextArea JTA_wpisz;

public Fasada()
{

    ActionListener al = new ActionListener() {  
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==JB_Dodaj){

        }
}};

setSize(480, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   

JPanel okno=new JPanel();
okno.setLayout(null);

JList JL_Lista = new JList();
JL_Lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane listScrollPane = new JScrollPane(JL_Lista);

JTA_wpisz = new JTextArea();
JTA_wpisz.setBounds(20, 20, 200, 40);

//Tworzenie wszystkich klawiszy okna i nadanie im parametrów

JB_Dodaj = new JButton("+");
JB_Dodaj.setBounds(240, 180, 50, 20);
JB_Dodaj.addActionListener(al);

JB_Usun = new JButton("-");
JB_Usun.setBounds(290, 180, 50, 20);
JB_Usun.addActionListener(al);

JB_Wyczysc = new JButton("Czyść");
JB_Wyczysc.setBounds(340, 180, 70, 20);
JB_Wyczysc.addActionListener(al);

JB_Aa = new JButton("A/a");
JB_Aa.setBounds(20, 80, 60, 20);
JB_Aa.addActionListener(al);

JB_abc = new JButton("abc");
JB_abc.setBounds(20, 120, 60, 20);
JB_abc.addActionListener(al);

JB_def = new JButton("def");
JB_def.setBounds(85, 120, 60, 20);
JB_def.addActionListener(al);

JB_ghi = new JButton("ghi");
JB_ghi.setBounds(150, 120, 60, 20);
JB_ghi.addActionListener(al);

JB_jkl = new JButton("jkl");
JB_jkl.setBounds(20, 150, 60, 20);
JB_jkl.addActionListener(al);

JB_mno = new JButton("mno");
JB_mno.setBounds(85, 150, 60, 20);
JB_mno.addActionListener(al);

JB_pqr = new JButton("pqr");
JB_pqr.setBounds(150, 150, 60, 20);
JB_pqr.addActionListener(al);

JB_tuv = new JButton("tuv");
JB_tuv.setBounds(52, 180, 60, 20);
JB_tuv.addActionListener(al);

JB_wxyz = new JButton("wxyz");
JB_wxyz.setBounds(117, 180, 65, 20);
JB_wxyz.addActionListener(al);

  okno.add(JTA_wpisz);

  okno.add(JB_Dodaj);
  okno.add(JB_Usun);
  okno.add(JB_Wyczysc);
  okno.add(JB_Aa);
  okno.add(JB_abc);
  okno.add(JB_def);
  okno.add(JB_ghi);
  okno.add(JB_jkl);
  okno.add(JB_mno);
  okno.add(JB_pqr);
  okno.add(JB_tuv);
  okno.add(JB_wxyz);
  okno.add(listScrollPane);

  setContentPane(new JScrollPane(okno));
  setVisible(true);

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

}

0

Skompilowałem i nie widzę problemu. Suwaki pojawią się jak będą potrzebne. Jak chcesz je od razu, to zrób tak:

    listScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    listScrollPane.setBounds(10,300,200,200); // tego Ci brakowało, jak rozmieszczasz ręcznie, to wszystkie komponenty musisz rozmieścić

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0