【发布时间】:2013-12-13 18:39:06
【问题描述】:
我有一个滚动窗格来加载图像。我不会用她的自然尺寸这张图片,如果这张图片太大,我不会激活滚动条,但是这条指令
g.drawImage(immagine, 0, 0, getWidth(), getHeight(), this);
用于放置在滚动窗格中的缩放图像。我能做什么?
类桂:
导入 java.awt.*; 导入 java.awt.event.*; 导入java.io.File; 导入 javax.swing.*; 公共类 Gui 实现 ActionListener { 私有 JFrame frmEditor; 私有 Mappa 内容; 私人 JMenuItem mntmSfondo; 私有 JScrollPane 可滚动; /** *启动应用程序。 */ 公共静态无效主要(字符串[]参数){ EventQueue.invokeLater(new Runnable() { 公共无效运行(){ 尝试 { Gui 窗口 = new Gui(); window.frmEditor.setVisible(true); } 捕捉(异常 e){ e.printStackTrace(); } } }); } /** * 创建应用程序。 */ 公共桂(){ 初始化(); } /** * 初始化框架的内容。 */ 私人无效初始化(){ frmEditor = new JFrame(); frmEditor.setFont(UIManager.getFont("TextArea.font")); frmEditor.setBounds(50, 50, 1024, 768); frmEditor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frmEditor.getContentPane().setLayout(new BorderLayout(0, 0)); JPanel panelTile = new JPanel(); panelTile.setLayout(new BorderLayout(0, 0)); 内容 = 新 Mappa(null); content.setMinimumSize(新维度(150, 150)); 可滚动 = 新 JScrollPane(内容); frmEditor.getContentPane().add(scrollabile, BorderLayout.CENTER); inizializzaMenu(); } /** * 初始化菜单。 */ 私人无效 inizializzaMenu() { JMenuBar menuBar = new JMenuBar(); frmEditor.setJMenuBar(menuBar); JMenu mnAltro = new JMenu("修改"); menuBar.add(mnAltro); mntmSfondo = new JMenuItem("加载背景"); mntmSfondo.addActionListener(this); mnAltro.add(mntmSfondo); } 公共无效actionPerformed(ActionEvent e){ 对象源 = e.getSource(); 如果(来源 == mntmSfondo){ JFileChooser fc = new JFileChooser("tuttiSfondi"); int 结果 = fc.showOpenDialog(null); 如果(结果 == JFileChooser.APPROVE_OPTION){ 文件文件 = fc.getSelectedFile(); 尝试 { 内容.setImage(文件); //content = new Mappa(file); //scrollabile.setViewportView(content); } 捕捉(异常前){ } } 如果(结果 == JFileChooser.CANCEL_OPTION){ } } } }类映射:
导入 java.awt.*; 导入 java.awt.image.BufferedImage; 导入java.io.*; 导入 javax.imageio.ImageIO; 导入 javax.swing.*; 公共类 Mappa 扩展 JPanel { BufferedImage 想象; 公共Mappa(文件fileImmagine){ if (fileImmagine != null ) { 缓冲图像 img = null; 尝试 { img = ImageIO.read(new File(fileImmagine.getPath())); } 捕捉(IOException e){ e.printStackTrace(); } this.immagine = img; } 重绘(); } 公共无效 setImage(文件文件)抛出 IOException { this.immagine = ImageIO.read(file); 字符串名称 = file.getPath(); System.out.println(name); 重绘(); } 公共无效paintComponent(图形g){ super.paintComponent(g); g.clearRect(0, 0, 4000, 4000); g.drawImage(this.immagine, 0, 0, getWidth(), getHeight(), this); System.out.println("在 Mappa 上调用 Repaint()"); } }【问题讨论】:
标签: java swing jscrollpane bufferedimage paintcomponent