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