簡體   English   中英

如何將JPanel放在JScrollpane中?

[英]How to put JPanel in JScrollpane?

我想將JPanel放在JScrollpane中,我編寫了此代碼,但是沒有用,所以我需要您的幫助

    centerPanel_scroll = new JScrollPane();
    centerPanel_scroll.setBounds(261, 71, 750, 698);
    center_panel = new JPanel();
    center_panel.setLayout(null);
    center_panel.setBackground(Color.cyan);
    centerPanel_scroll.setViewportView(center_panel);
    main_panel.add(centerPanel_scroll);

你center_panel JScrollPane的。 視口不考慮大小/邊界,而是首選大小,因此,如果需要,可以通過setPreferredSize(...)設置首選大小,或者甚至更好,使組件擴展getPreferredSize()

我不知道您要通過261、71處的setBounds位置實現什么目標。該位置在視口中,因此毫無意義。

同樣,您可能會搞砸使用null布局,而JScrollPanes可能會對它產生很大的麻煩。 只是不設置邊界/大小或使用空布局,您會發現生活變得容易得多。

例如,

centerPanel_scroll = new JScrollPane();
// centerPanel_scroll.setBounds(261, 71, 750, 698);
center_panel.setPreferredSize(new Dimension(750, 698));
center_panel = new JPanel();
// center_panel.setLayout(null);
center_panel.setPreferredSize(new Dimension(900, 800));
center_panel.setBackground(Color.cyan);
centerPanel_scroll.setViewportView(center_panel);
main_panel.add(centerPanel_scroll);

例如,

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.*;

public class ScrollEg extends JPanel {
    public ScrollEg() {
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setViewportView(new InnerPanel());

        setLayout(new BorderLayout());
        add(scrollPane, BorderLayout.CENTER);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(650, 500);
    }

    private static class InnerPanel extends JPanel {
        private static final int PREF_W = 1000;
        private static final Color COLOR_1 = Color.RED;
        private static final Color COLOR_2 = Color.BLUE;

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(PREF_W, PREF_W);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.setPaint(new GradientPaint(0, 0, COLOR_1, 100, 100, COLOR_2, true));
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2.fillOval(0, 0, PREF_W, PREF_W);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            ScrollEg mainPanel = new ScrollEg();
            JFrame frame = new JFrame("ScrollEg");
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.add(mainPanel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM