JScrollPane中的Java JPanel? [英] Java JPanel inside JScrollPane?

查看:240
本文介绍了JScrollPane中的Java JPanel?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个JFrame,在这个JFrame中我有一个我绘制的JPanel,这个Panel可以是任何大小,因此我将它放入一个JScrollpane,让我在面板大于窗口大小时滚动。 / p>

很遗憾不能按预期工作:


  1. 制作JFrame小于JPanel大小的窗口不显示滚动条


  2. JScrollPane大小现在似乎已锁定到我添加到它的JPanel的大小,与之前一样它调整到它的JFrame窗口的边界(它仍然有点这样但现在只是垂直?!)


  3. JPanel似乎假设JScrollpane的大小无论我为首选尺寸设置了什么


我确信我做的事情很愚蠢,如果有人可以指出的话我将不胜感激!

  JPanel _ImageCanvas = new JPanel(); //'Canvas'在
上绘制JScrollPane _ScrollPane = new JScrollPane();

//设置'canvas'的大小
_ImageCanvas.setMinimumSize(new Dimension(100,100));

//滚动窗格小于画布的大小,所以我们应该滚动条吧?
_ScrollPane.setMinimumSize(new Dimension(50,50));

//为'canvas'添加边框
_ImageCanvas.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0,0,0)));

_ScrollPane.setViewportView(JPanel);

非常感谢



David

解决方案

setPreferredSize()是技巧,comcrollPane将忽略组件上的setMinimumSize()甚至setSize()。这是一个使用红色边框的工作示例。

  import java.awt。*; 

import javax.swing。*;

公共类Scroller扩展JFrame {

public Sc​​roller()throws HeadlessException {
final JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createLineBorder(Color.red));
panel.setPreferredSize(new Dimension(800,600));

final JScrollPane scroll = new JScrollPane(panel);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(scroll,BorderLayout.CENTER);
setSize(300,300);
setVisible(true);
}

public static void main(final String [] args)抛出异常{
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
new Scroller()。setVisible(true);
}
});
}
}


I have a JFrame, in this JFrame I have a JPanel that I draw on, this Panel can be any size and so I placed it into a JScrollpane to let me scroll when the panel is larger than the window screen size.

Unfortunately does not work as I expected:

  1. Making the JFrame window smaller than the JPanel size does not show scroll bars

  2. The JScrollPane size now seems locked to the size of the JPanel I have added to it, where as before it resized to the bounds of it's JFrame window (it still kinda does this but only vertically now?!)

  3. The JPanel seems to assume the size of the JScrollpane regardless of what I set for preferred size

I am sure I'm doing something stupid, if someone could point out what I would be most grateful!

JPanel _ImageCanvas = new JPanel(); // 'Canvas' to draw on
JScrollPane _ScrollPane = new JScrollPane();

// set size of 'canvas'
_ImageCanvas.setMinimumSize(new Dimension(100,100));

// Scroll pane smaller then the size of the canvas so we should get scroll bars right?
_ScrollPane.setMinimumSize(new Dimension(50,50)); 

// Add a border to 'canvas'
_ImageCanvas.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

_ScrollPane.setViewportView(JPanel);

Many thanks

David

解决方案

setPreferredSize() is the trick, setMinimumSize() and even setSize() on the component will be ignored by JScrollPane. Here's a working example using a red border.

import java.awt.*;

import javax.swing.*;

public class Scroller extends JFrame {

    public Scroller() throws HeadlessException {
        final JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createLineBorder(Color.red));
        panel.setPreferredSize(new Dimension(800, 600));

        final JScrollPane scroll = new JScrollPane(panel);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        add(scroll, BorderLayout.CENTER);
        setSize(300, 300);
        setVisible(true);
    }

    public static void main(final String[] args) throws Exception {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Scroller().setVisible(true);
            }
        });
    }
}

这篇关于JScrollPane中的Java JPanel?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆