根据我的代码,无论我在其中遇到任何其他错误,如何在一个面板上获得两个图像?我必须让这个程序每个面板显示4个图像2,第一个面板并排放置,第二个面板能够拖动和调整大小?我真的不确定如何解决这个问题。我可以用4个面板获得所有4个图像,但这不是作业所要求的。谢谢!!
import java.awt.*;
import javax.swing.*;
public class TwoPanels
{
//-----------------------------------------------------------------
// Creates and displays the primary application frame.
//-----------------------------------------------------------------
public static void main (String[] args)
{
JFrame frame = new JFrame ("Label Demo");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
ImageIcon icon1 = new ImageIcon ("coin.jpg");
ImageIcon icon2 = new ImageIcon ("coke.jpg");
ImageIcon icon3 = new ImageIcon ("shuttle.jpg");
ImageIcon icon4 = new ImageIcon ("sun.jpg");
JLabel label1, label2;
label1 = new JLabel ( icon1, SwingConstants.CENTER);
label1.setHorizontalTextPosition (SwingConstants.LEFT);
label1.setVerticalTextPosition (SwingConstants.BOTTOM);
label1 = new JLabel ( icon2, SwingConstants.CENTER);
label2 = new JLabel (icon3, SwingConstants.CENTER);
label2.setHorizontalTextPosition (SwingConstants.CENTER);
label2.setVerticalTextPosition (SwingConstants.BOTTOM);
label2 = new JLabel (icon4, SwingConstants.CENTER);
JPanel panel = new JPanel();
panel.setBackground (Color.cyan);
panel.setPreferredSize (new Dimension (960, 640));
panel.add (label1);
panel.add (label2);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
答案 0 :(得分:1)
使用LayoutManager
控制Swing中子元素的布局。
左侧面板(未调整大小)可以使用BoxLayout。使用X_AXIS创建它以并排放置这两个图像。
整体框架(特别是它的内容窗格)被指定为调整到右侧面板..所以也许BorderLayout是最好的方法。左侧面板为WEST,未调整大小,右侧面板为CENTER,并为剩余区域调整大小。
请参阅:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
另一个注意事项:推荐常数& Swing的方向命名已经改变..更多地相对于国际化等的文本方向,而不是绝对方向。现在推荐使用LINE_AXIS优于X_AXIS,但不太清楚。
我不知道你的导师会如何标记这样的区域,所以只是要注意。
答案 1 :(得分:0)
正如Thomas W所说,请确保熟悉布局管理器。特别是GridLayout,BorderLayout和FlowLayout,因为它们通常可以让您创建几乎任何类型的布局。如果你想要更多控制并扩展你对布局管理器的理解,那么我建议调查GridBagLayout,它是最强大的布局管理器。要回到你的问题,为了使面板显示两个图像,你可以有一个面板,比如Panel1,它使用只有2列的gridlayout(查看GridLayout构造函数,它需要行数和列数)。然后,您可以创建另外两个面板并将它们添加到Panel1,其中其他面板是扩展JPanel的类MyCustomPanel的实例,并覆盖paintComponent(Graphics g)方法以显示所需的图像。 MyCustomPanel构造函数可以包含一个Image参数,paintComponent方法可以引用该参数。
希望它有所帮助。如果您需要更多帮助,请添加评论我很乐意为您提供帮助。