JPanel放置到JScrollPane里面并显示滚动条

一开始,我是知道不能直接在JScrollPane对象里用add()的,需要获取它的视图板
getViewport();这是一个JViewport对象,然后在这上面添加,而且它不能添加轻量级组件。
  我弄了一个JPanel,上面用网格布局10行1列的,本来想,把这个板添加到Viewport上就行了,结果发现,没有出现滚动条,于是我设置Viewport的布局方式,用尽了都不行。比如说用NULL布局吧,然后把Panel设长,结果Panel确实变长了,但滚动条不出来
 
  经过费心苦想,我直接设置了一下Panel的setPerferredSize(Dimension dim),dim的参数我用的是Viewport的getDemension所得。这下好了,哈哈,安装上去实现了滚动。
 
===============
附上一个例子
 
因为scrollPane是根据里面的子控件的preferredSize来确定滚动条的。
让image尺寸变化时,scrollPane能得到新的数据。
解决方式有两种,一种是改变大小时重新设置JPanel的preferred size;
一种是重载getPreferredSize()方法,按照需要返回,楼主的情况可以返回当前
图片的大小的Dimension。
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class ScrollPaneDemo extends JFrame implements MouseListener {

        ImagePanel jp;
       
        JScrollPane jsp;

        public ScrollPaneDemo() {
                super("JScrollPane Demo");
                jp = new ImagePanel();
                jp.setPreferredSize(new Dimension(600, 400));
                jsp = new JScrollPane(jp);
                jp.addMouseListener(this);
                getContentPane().add(jsp);
                setSize(640, 480);
                setDefaultCloseOperation(EXIT_ON_CLOSE);
                setVisible(true);
        }

        public void mouseClicked(MouseEvent e) {
                System.out.println("mouseClicked");
                jp.enlarge();
                jp.setPreferredSize(jp.getPreferredSize());
                jsp.validate();
        }

        public void mousePressed(MouseEvent e) {
                // System.out.println("mousePressed");
        }

        public void mouseReleased(MouseEvent e) {
                // System.out.println("mouseReleased");
        }

        public void mouseEntered(MouseEvent e) {
                // System.out.println("mouseEntered");
        }

        public void mouseExited(MouseEvent e) {
                // System.out.println("mouseExited");
        }

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

class ImagePanel extends JPanel {
        private Image image;

        private Dimension theSize = new Dimension(600, 400);

        public void setImage(Image image) {
                this.image = image;
                this.repaint();
        }

        public Image getImage() {
                return this.image;
        }

        public void paintComponent(Graphics g) {
                ImageIcon img = new ImageIcon("Winter.jpg");
                g.drawImage(img.getImage(), 0, 0, theSize.width, theSize.height, null);
        }

        public void enlarge() {
                theSize.width = (theSize.width * 101) / 100;
                theSize.height = (theSize.height * 101) / 100;
                setSize(theSize);
        }
       
        public Dimension getPreferredSize() {
                return this.theSize;
        }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用JScrollPane将JTextField放在其中,并将滚动条设置为垂直或水平,具体可以参考下面的示例代码: ``` JTextField textField = new JTextField(); JScrollPane scrollPane = new JScrollPane(textField); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); ``` 这将创建一个带有垂直滚动条的JTextField,如果需要水平滚动条,则需要将`VERTICAL_SCROLLBAR_ALWAYS`改为`HORIZONTAL_SCROLLBAR_ALWAYS`。 ### 回答2: 在使用JTextField设置滚动条时,首先需要将JTextField放置JScrollPane中。例如,可以使用以下代码实现: ```java JTextField textField = new JTextField(); JScrollPane scrollPane = new JScrollPane(textField); ``` 接下来,可以根据需要设置滚动条显示方式。有三种常用的显示方式可供选择,分别是: 1. 始终显示滚动条:可以通过设置垂直和水平滚动条显示策略来实现。例如,使用以下代码将垂直和水平滚动条都设置为始终显示: ```java scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); ``` 2. 仅在需要时显示滚动条:可以通过设置垂直和水平滚动条显示策略来实现。例如,使用以下代码将垂直和水平滚动条都设置为仅在需要时显示: ```java scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); ``` 3. 从不显示滚动条:可以通过将垂直和水平滚动条显示策略设置为NEVER来实现。例如,使用以下代码将垂直和水平滚动条都设置为从不显示: ```java scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); ``` 最后,将JScrollPane添加到需要显示的容器中即可。可以使用以下代码将JScrollPane添加到一个Panel中,并将Panel添加到Frame中: ```java JPanel panel = new JPanel(); panel.add(scrollPane); JFrame frame = new JFrame(); frame.add(panel); frame.pack(); frame.setVisible(true); ``` 通过以上步骤,就可以成功设置JTextField的滚动条。 ### 回答3: JTextField是Java Swing库中的一个文本输入框组件,通常用于接收用户输入的文本。为了处理长文本输入,我们可以为JTextField设置滚动条。 首先,我们需要创建一个JTextArea组件,用于显示文本输入框的内容。然后,通过将JTextArea放置在一个JScrollPane中,我们可以实现滚动条的功能。 下面是一个示例代码: ``` import javax.swing.*; import java.awt.*; public class JTextFieldWithScrollbar { public static void main(String[] args) { // 创建一个JFrame窗口 JFrame frame = new JFrame("JTextField with Scrollbar"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); // 创建一个JTextField组件 JTextField textField = new JTextField(); // 创建一个JTextArea组件 JTextArea textArea = new JTextArea(); textArea.setEditable(false); // 创建一个JScrollPane,将JTextArea放置进去 JScrollPane scrollPane = new JScrollPane(textArea); // 将JScrollPane添加到JFrame中 frame.getContentPane().add(scrollPane, BorderLayout.CENTER); // 将JTextField添加到JFrame中(可选) frame.getContentPane().add(textField, BorderLayout.NORTH); // 添加一个监听器,将JTextField中的文本添加到JTextArea中 textField.addActionListener(e -> { String text = textField.getText(); textArea.append(text + "\n"); textField.setText(""); }); // 显示JFrame窗口 frame.setVisible(true); } } ``` 在这个示例中,我们创建了一个使用滚动条的JTextField。当用户在JTextField中按下回车键时,文本将被添加到JTextArea中,并显示JScrollPane中。如果文本长度超过JTextArea的高度,那么滚动条自动出现,以便用户可以滚动文本内容。 希望这个回答对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值