如何在 JFrame 中的 JScrollPane 底部显示按钮

How to show the Button in the bottom of the JScrollPane Inside a JFrame

我正在开发一个试图在 JFrame 中显示横幅的应用程序。在 JFrame 内部,我使用了一个 JScrollbar,它使用 JEditorPane 来显示 HTML 页面的内容。

    public static JFrame ShowBanner() throws IOException {
        int width = 0;
        int height = 0;
        String urlText = null;
        String ScrnResol = getScreenResolution();
        String[] ScreenResolution = ScrnResol.split(",");
        try {
            width = Integer.parseInt(ScreenResolution[0]);
            height = Integer.parseInt(ScreenResolution[1]);
        } catch (NumberFormatException nfe) {
            logger.error("NumberFormatException: " + nfe.getMessage());
        }
        //Creating Frame
        frmOpt = new JFrame("Banner");
        frmOpt.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frmOpt.setPreferredSize(new Dimension(width, height));
        frmOpt.setUndecorated(true);
        frmOpt.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.1f));
        frmOpt.setVisible(true);
        frmOpt.setAlwaysOnTop(true);
        frmOpt.setLocationRelativeTo(null);
        //bringToForeground(getHWND(frmOpt));
        JPanel panel = new JPanel();
        LayoutManager layout = new FlowLayout();
        panel.setLayout(layout);
        JEditorPane jEditorPane = new JEditorPane();
        jEditorPane.setEditable(false);
        try {
            
            String urlText=IOUtils.toString(BringUpFrame.class.getClassLoader().getResourceAsStream("banner.htm"));
            jEditorPane.setContentType("text/html");
            jEditorPane.setText(urlText);
        } catch (Exception e) {
            logger.error("Exception while executing showBanner: {}", e);
            jEditorPane.setContentType("text/html");
            jEditorPane.setText("<html>Page not found.</html>");
        }
        JScrollPane jScrollPane = new JScrollPane(jEditorPane);
        scrollPane.setColumnHeaderView(createButton());
        jScrollPane.setPreferredSize(new Dimension(width, height));
        panel.add(jScrollPane);
        frmOpt.add(panel);
        frmOpt.pack();
        frmOpt.setVisible(true);
        return frmOpt;

   }

   private static JPanel createButton() {
        JPanel panel = new JPanel();
        panel.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.1f));
        JButton button = new JButton("Close");
        panel.add(button);
        return panel;
    }

当前视图如下所示:

截至目前按钮显示在顶部。我想要做的是将按钮放在屏幕底部。我尝试了一些布局(BoxLayout 和 BorderLayout),但视图符合预期。我可以理解这将是一个小的变化,但我在 Swing 编程方面没有太多经验。

有人可以建议我怎样才能做到这一点。

编辑:

尝试了建议的更改:

JScrollPane jScrollPane = new JScrollPane(jEditorPane);
panel.add(jScrollPane);
frmOpt.add(panel,BorderLayout.CENTER);
frmOpt.add(createButton(),BorderLayout.PAGE_END);

但它并没有像预期的那样出现。 JscrollPane 中的按钮和 html 页面显示完全分开,页面也没有完全显示。

谢谢,

JFrame[内容窗格]的默认布局管理器是BorderLayout。中心组件占据了所有剩余的 space。因此 BorderLayout 忽略了中心组件的首选大小。另一方面,FlowLayout 尊重其包含的组件的首选大小。由于您已将 JFrame 最大化,其中心组件将几乎占据整个屏幕,因此您只需将 JScrollPane 添加到 BorderLayout 中心即可。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;

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

public class ForManish {
    private void createAndDisplayGui() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setUndecorated(true);
        frame.add(createScrollPane(), BorderLayout.CENTER);
        frame.add(createButtonPanel(), BorderLayout.PAGE_END);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setVisible(true);
    }

    private JScrollPane createScrollPane() {
        JEditorPane editorPane = new JEditorPane("text/html", "<h1 align=\"center\">Checkout unavailable");
        editorPane.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.1f));
        JScrollPane scrollPane = new JScrollPane(editorPane);
        scrollPane.setBorder(BorderFactory.createLineBorder(new Color(1.0f, 1.0f, 1.0f, 0.1f)));
        return scrollPane;
    }

    private JPanel createButtonPanel() {
        JPanel buttonPanel = new JPanel();
        buttonPanel.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.1f));
        JButton closeButton = new JButton("Close");
        buttonPanel.add(closeButton);
        return buttonPanel;
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> new ForManish().createAndDisplayGui());
    }
}