Подтвердить что ты не робот

Прокрутка JPanel

Я хочу JPanel с размером и определенной позицией. Внутри JPanel у меня есть определенное количество элементов (кнопок), вставленных горизонтально. Поскольку мой JPanel имеет определенную ширину, если я добавляю много кнопок, я не мог этого видеть. В этом случае мне нужна полоса прокрутки для этой JPanel. Но этот JPanel должен быть НЕКОТОРЫМ РАЗМЕРОМ В НЕКОТОРЫХ ПОЛОЖЕНИЯХ внутри JFrame. Полоса прокрутки JPanel расположена под ней горизонтально. Кто-то может мне помочь? Я пробовал это без успеха!

4b9b3361

Ответ 1

Используйте JScrollPane и принудительно добавьте свой предпочтительный размер к указанному размеру (или установите для параметра LayoutManager контейнера scrollPane значение null и вызовите setBounds() в scrollpane). Также задайте политики прокрутки. Вот небольшой пример этого:

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class Test {

    public static void main(String... args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        for (int i = 0; i < 10; i++) {
            panel.add(new JButton("Hello-" + i));
        }
        JScrollPane scrollPane = new JScrollPane(panel);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
        scrollPane.setBounds(50, 30, 300, 50);
        JPanel contentPane = new JPanel(null);
        contentPane.setPreferredSize(new Dimension(500, 400));
        contentPane.add(scrollPane);
        frame.setContentPane(contentPane);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }
}

Ответ 2

Добавьте все кнопки на панель. Затем добавьте эту панель в scrollpane.

panel.add(button1);
panel.add(button2);
panel.add(button3);
.
.
.
panel.add(buttonn);

После добавления кнопок на панели добавьте панель в scrollpane.

JScrollPane panelPane = new JScrollPane(panel);

Затем добавьте эту панель в свой фрейм.

Ответ 3

Вот несколько возможных решений:

или

  • для прокрутки к решению Point или Rectangle существует метод scrollRectToVisible, например. myPanel.scrollRectToVisible(myButton.getBounds());