这似乎是一个新手问题,除了我一直试图绕着Swing框架包围我的时间。
如果您提供至少500像素的图像dog.jpg,以下代码应在滚动窗格中显示图像。如果它显示任何,我可能不会绝望地举起双手。我错过了什么?
import java.awt.BorderLayout;
import javax.swing.*;
public class ScrollSample {
public static void main(String args[]) {
String title = (args.length == 0 ? "JScrollPane Sample" : args[0]);
new ScrollSample( title ) ;
}
public ScrollSample ( String title) {
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Icon icon = new ImageIcon("dog.jpg");
JLabel dogLabel = new JLabel(icon);
dogLabel.setSize( 500, 500 ) ;
JLayeredPane layeredPane = new JLayeredPane() ;
layeredPane.add( dogLabel, new Integer( 0 )) ;
JPanel jp = new JPanel() ;
jp.add( layeredPane ) ;
jp.setSize( 500, 500 ) ;
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(jp);
frame.getContentPane().add( scrollPane, BorderLayout.CENTER);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
谢谢!
答案 0 :(得分:4)
如果要绘制宽度和大小较大的组件,则必须设置JLayeredPane
的首选大小。特别是因为您要将其添加到具有默认布局的JPanel。 JLayeredPane
默认情况下没有布局管理器 - 因此要么管理边界,要么将首选布局管理器添加到分层窗格。简单的方法是:
在
JLayeredPane layeredPane = new JLayeredPane() ;
添加
layeredPane.setPreferredSize(new Dimension(500,500));
然后在应用运行时最大化您的窗口(或将JFrame
的大小设置为600X600)。
答案 1 :(得分:4)
答案 2 :(得分:4)
应该在EDT上启动Swing GUI。留作用户的练习。
import java.awt.*;
import javax.swing.*;
import java.net.URL;
public class ScrollSample {
public static void main(String args[]) throws Exception {
final URL url = new URL("http://pscode.org/media/stromlo2.jpg");
String title = (args.length == 0 ? "JScrollPane Sample" : args[0]);
new ScrollSample( title, url ) ;
}
public ScrollSample ( String title, URL url) {
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Icon icon = new ImageIcon(url);
JLabel dogLabel = new JLabel(icon);
dogLabel.setBounds(0,0,640,480);
JLayeredPane layeredPane = new JLayeredPane() ;
layeredPane.add( dogLabel, new Integer( 0 )) ;
layeredPane.setPreferredSize( new Dimension(500, 500) ) ;
JPanel jp = new JPanel(new BorderLayout()) ;
jp.add( layeredPane ) ;
JScrollPane scrollPane = new JScrollPane(jp);
frame.getContentPane().add( scrollPane, BorderLayout.CENTER);
frame.setSize(300, 200);
frame.setVisible(true);
}
}