Как получить JButton, который двигается при прокрутке кадра? - PullRequest
0 голосов
/ 15 марта 2020

У меня есть панель, которую я сделал прокручиваемой в моем кадре. Что мне нужно, это добавить кнопку, которая остается фиксированной в правом нижнем углу, даже когда я прокручиваю. Я новичок в Java Swing, поэтому буду благодарен всем и за любую помощь, которую я смогу получить.

mainPanel = new SimulationPanel(); //class SimulationPanel extends JPanel

//making mainPanel scrollable
mainPanel.setPreferredSize(new Dimension(((int)(WIDTH*1.2)), HEIGHT));
JScrollPane scrollPane = new JScrollPane(mainPanel);
scrollPane.setViewportView(mainPanel);

// Settings for JFrame
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame = new JFrame("Warehouse Simulator");
frame.setContentPane(scrollPane);
frame.setSize(screenSize.width, screenSize.height);
frame.setResizable(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);

Ответы [ 2 ]

2 голосов
/ 15 марта 2020

Я бы использовал вложенные панели с внешней с BorderLayout. Затем один с FlowLayout и выровняйте FlowLayout.RIGHT и кнопку внутри него.

public class Example extends JFrame {
    public Example() {
        super("");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new BorderLayout());

        JTextArea textArea = new JTextArea(10000, 0);
        JScrollPane scrollPane = new JScrollPane(textArea);

        add(scrollPane, BorderLayout.CENTER);

        JButton button = new JButton("button");

        JPanel panelWithButton = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        panelWithButton.add(button);
        add(panelWithButton, BorderLayout.PAGE_END);

        setLocationByPlatform(true);
        pack();
        setSize(600, 600);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new Example().setVisible(true);
        });
    }
}

Результат:

result

1 голос
/ 15 марта 2020

Я бы go для BoxLayout. Добавьте другую панель (metaPanel), в которую вы сначала поместите scrollingPanel, а затем добавьте кнопку. Вместо того, чтобы использовать scrollingPanel как contentPane, вы используете metaPanel. Пример (пример работает, но вам нужно изменить его, чтобы интерфейс выглядел красиво):

    JPanel mainPanel = new JPanel();
    JScrollPane scrollPane = new JScrollPane(mainPanel);
    scrollPane.setViewportView(mainPanel);

    JPanel metaPanel = new JPanel();
    BoxLayout boxlayout = new BoxLayout(metaPanel, BoxLayout.Y_AXIS);
    metaPanel.setLayout(boxlayout);
    metaPanel.add(scrollPane);
    metaPanel.add(new JButton("button"));

    // Settings for JFrame
    frame = new JFrame("Warehouse Simulator");
    frame.setContentPane(metaPanel); // Put metaPanel here
    frame.setSize(500, 300);
    frame.setResizable(true);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setVisible(true);
...