如何添加滚动条和缩放图像?

时间:2014-04-12 01:17:00

标签: java swing scroll awt scaling

好吧基本上我一直在尝试用swing,awt等制作一个交互式地图。我在直接进入我的项目之前测试了一些东西,我在图像大小方面遇到了困难,并且添加了一个滚动条,图像是2000x1000 png,但它似乎只显示中间的500x500像素(我将提供图像)我也查找了一些滚动条,但它似乎没有做任何事情?基本上我希望帮助整个图像以及任何其他窗口中的滚动条。这是我的代码。

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class GuiM extends JFrame{
    private JPanel map;
    private JPanel buttons;
    private JLabel imageLabel;
    public GuiM(){
        JScrollPane scroller = new JScrollPane(map);  
        this.getContentPane().add(scroller, BorderLayout.EAST); 
        map = new JPanel();
        map.setLayout(new GridLayout());
        buttons = new JPanel();
        imageLabel =  new JLabel(new ImageIcon(getClass().getResource("MapLI.png")));
        map.add(imageLabel);
        setLayout(new GridLayout());
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setVisible(true);
        setResizable(true);
        add(map);
        add(buttons);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

public class MainM {

    public static void main(String[] args){ 
        GuiM gui = new GuiM();
    }
}

以下是一些图片
这个图像是我想在我的面板中显示的内容 just a test map i'd like to use first

然而,这就是我所得到的 problem

3 个答案:

答案 0 :(得分:1)

 JScrollPane scroller = new JScrollPane(map);

由于map变量为null,因此上述语句不执行任何操作。摆脱它。

  this.getContentPane().add(scroller, BorderLayout.EAST);

上述语句不执行任何操作,因为您稍后将布局更改为GridLayout,并且滚动条不包含任何要显示的组件。摆脱它。

您想要将滚动条添加到GUI,而不是地图,因此代码应该类似于:

//add(map);
JScrollPane scroller = new JScrollPane(map); // or add the "imageLabel"
add(scroller);

或者,将标签添加到滚动窗格会更容易,不需要创建一个面板来保存标签。

此外,setVisible(true)语句应该移动到程序的底部,在组件添加到框架之后和包装()之后。

答案 1 :(得分:0)

您没有将标签imagelabel添加到JScrollPane,如下所示。请将此添加到您的代码:

修改后的代码将如下所示。

GuiM.java

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class GuiM extends JFrame{
    private JPanel map;
    private JPanel buttons;
    private JLabel imageLabel;
    public GuiM(){
        JScrollPane scroller = new JScrollPane(map);  
        this.getContentPane().add(scroller, BorderLayout.EAST); 
        map = new JPanel();
        map.setLayout(new GridLayout());
        buttons = new JPanel();
        imageLabel =  new JLabel(new ImageIcon(getClass().getResource("MapLI.png")));
        JScrollPane scrollpane=new JScrollPane(imageLabel);
        map.add(scrollpane);
        setLayout(new GridLayout());
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setVisible(true);
        setResizable(true);
        add(map);
        add(buttons);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

和 MainM.java

public class MainM {

    public static void main(String[] args){ 
        GuiM gui = new GuiM();
    }
}

答案 2 :(得分:0)

您可以使用java.awt类将滚动条添加到代码中。请参阅链接以获取完整代码。 http://www.fixoncloud.com/Home/LoginValidate/OneProblemComplete_Detailed.php?problemid=558