Java Swing混合窗格
这看起来像是一个新手问题,除了我一直在试图围绕Swing框架思考很久 如果您提供一个至少500像素见方的图像dog.jpg,下面的代码应该在滚动窗格中显示该图像。如果它显示了什么,我可能不会绝望地举手。我错过了什么Java Swing混合窗格,java,swing,jlayeredpane,Java,Swing,Jlayeredpane,这看起来像是一个新手问题,除了我一直在试图围绕Swing框架思考很久 如果您提供一个至少500像素见方的图像dog.jpg,下面的代码应该在滚动窗格中显示该图像。如果它显示了什么,我可能不会绝望地举手。我错过了什么 import java.awt.BorderLayout; import javax.swing.*; public class ScrollSample { public static void main(String args[]) { String title =
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);
}
}
谢谢 如果要为
JLayeredPane
绘制更大宽度和尺寸的构件,则必须为其设置首选尺寸。特别是当您使用默认布局将其添加到JPanel中时JLayeredPane
s默认情况下没有布局管理器-因此您可以管理边界或向分层窗格添加首选布局管理器。简单的方法是:
之后
加
然后在应用程序运行时最大化窗口(或将JFrame
的大小设置为600X600)
阅读:- JPanel的默认布局是Flowlayout。流程布局显示 每个组件具有其首选大小,并具有5像素边框。使用 改为BorderLayout(或将分层窗格直接添加到滚动窗格)
- JLayeredPane的默认首选大小为(0,0)。设定 它的首选尺寸
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);
}
}
像往常一样,我建议使用“无法发现代码中有任何明显错误”。是否已将dog.jpg放入项目根目录中?public static void main(String[]args){//为事件调度线程安排作业://创建并显示此应用程序的GUI.javax.swing.SwingUtilities.invokeLater(new Runnable(){public void run(){String title=(args.length==0)?“JScrollPane Sample”:args[0]);new ScrollSample(title,url);}}}}}布局管理器问题是需要中间JPanel jp的原因吗?我花了一段时间才弄清楚。
layeredPane.setPreferredSize(new Dimension(500,500));
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);
}
}