gpt4 book ai didi

java - 我无法让 JScrollPanes 实际显示滚动条

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:59:19 25 4
gpt4 key购买 nike

我在互联网上发现了一些例子,涉及获取图像或文本框来显示滚动条,但它们都涉及一个基本上在滚动 Pane 中显示其全部内容的程序。我需要让它做的是在某处粘贴一个 JPanel,将一堆文本、图标等堆到该面板中,直到它对于我为它准备的空间来说太大了,然后滚动它。

我可能还需要能够对该面板进行空布局,因为我可能迟早要手动在其中放置内容。

所以我尝试制作一个非常简单的程序,将三个彩色 block 放在一个足够容纳两个的空间中,并显示一个滚动条,让您向下滚动以查看第三个。它不添加滚动条。

导入有点困惑和多余,因为这是从几个不同的文件拼凑而成的,但它们不会产生任何错误。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;

public class ScrollDemo extends JFrame {

JScrollPane scrollpane;

public ScrollDemo() {
super("JScrollPane Demonstration");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
setVisible(true);
}

public void init() {
setLayout(null);
JPanel innerPanel = new JPanel();
JPanel outerPanel = new JPanel();
getContentPane().setBounds(0,0,800,600);
outerPanel.setBounds(400,0,400,400);
innerPanel.setBounds(0,0,600,600);
innerPanel.setLayout(null);

JPanel greenPanel = new JPanel();
JPanel yellowPanel = new JPanel();
JPanel bluePanel = new JPanel();

greenPanel.setBounds(0,0,200,200);
yellowPanel.setBounds(0,200,200,200);
bluePanel.setBounds(0,400,200,200);
greenPanel.setBackground(Color.GREEN);
yellowPanel.setBackground(Color.YELLOW);
bluePanel.setBackground(Color.BLUE);

innerPanel.add(greenPanel);
innerPanel.add(yellowPanel);
innerPanel.add(bluePanel);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(innerPanel);
scrollPane.setBounds(200,0,200,400);
add(scrollPane);


}

public static void main(String args[]) {
new ScrollDemo();
}
}

最佳答案

更好的做法是使用布局管理器发挥自己的优势,让这些管理器为您完成计算组件尺寸和位置的繁重工作。例如:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.*;

public class ScrollDemo2 extends JPanel {
public static final Color[] COLORS = {Color.green, Color.red, Color.blue};
private static final Dimension PANEL_SIZE = new Dimension(300, 300);
public ScrollDemo2() {
JPanel innerPanel = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < COLORS.length; i++) {
JPanel colorPanel = new JPanel();
colorPanel.setPreferredSize(PANEL_SIZE);
colorPanel.setBackground(COLORS[i]);
innerPanel.add(colorPanel);
}
JScrollPane scrollPane = new JScrollPane(innerPanel);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.getViewport().setPreferredSize(PANEL_SIZE);

int eb = 10;
setBorder(BorderFactory.createEmptyBorder(eb, eb, eb, eb));
setLayout(new BorderLayout());
add(scrollPane, BorderLayout.CENTER);
}

private static void createAndShowGui() {
ScrollDemo2 mainPanel = new ScrollDemo2();

JFrame frame = new JFrame("ScrollDemo2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于java - 我无法让 JScrollPanes 实际显示滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11379533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com