[英]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.