【问题标题】:JScrollPane not moving viewJScrollPane 不移动视图
【发布时间】:2012-03-04 11:44:13
【问题描述】:

我正在尝试创建一个屏幕,让我可以滚动到 JPanel 的不同区域。即我想要一个用于绘图的 JPanel,它的大小比它所在的 JFrame 更大,我正在尝试使用 JScrollPane 来查看 JPanel 的不同区域。

JFrame mainFrame = new JFrame("My Frame");        
mainFrame.setSize(700, 700);

clickScreen = new ClickPanel();   
clickScreen.setPreferredSize(new Dimension(2000, 2000));

JScrollPane scrollArea = new JScrollPane(clickScreen,
                                         JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
                                         JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);


mainFrame.getContentPane().add(scrollArea, BorderLayout.CENTER);

其中 ClickPanel 是我创建的一个类,它扩展了 JPanel 并用于绘图。

我的问题是:当我使用滚动条滚动时,视点会移动,但我的paintComponent 中的绘图显示在同一个地方。我希望能够滚动到它下面的新区域,以便我可以在那里绘制。

【问题讨论】:

  • 尝试通过 panel.setSize(2000,2000); 设置大小
  • 不要这样使用setPreferredSize();另见Q&A

标签: java swing user-interface jscrollpane


【解决方案1】:

你可以试试这个:

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;


public class ScrollingView extends JFrame {

    private static final long serialVersionUID = -866635590539200791L;

    private JScrollPane scrollPane;
    private JPanel panel;

    public ScrollingView() {
        panel = new JPanel();
        panel.setPreferredSize(new Dimension(2000, 2000));
        panel.setLayout(new BorderLayout());

        panel.add(new JLabel("Label 1 Set to West"), BorderLayout.WEST);
        panel.add(new JLabel("Label 2 Set to East"), BorderLayout.EAST);

        scrollPane = new JScrollPane(panel);

        setPreferredSize(new Dimension(700, 700));
        setContentPane(scrollPane);
        pack();
        setVisible(true);
    }

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

            @Override
            public void run() {
                new ScrollingView();
            }
        });
    }
}

【讨论】:

  • 注意 ad hoc 使用 setPreferredSize() 仅作说明。如果仅用于绘图,则 OP 的ClickPanel 应确定其自己的首选尺寸。
【解决方案2】:

要了解更多关于 jscrollpane 的信息,您可以参考Jscrollpane oracle docs

【讨论】:

  • 请不要链接到EOL java版本的api doc,而是链接到当前的7
猜你喜欢
  • 2013-11-15
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多