在面板中使用图像

时间:2013-10-17 04:11:52

标签: java image swing jpanel jlabel

根据我的代码,无论我在其中遇到任何其他错误,如何在一个面板上获得两个图像?我必须让这个程序每个面板显示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);
    }
}

2 个答案:

答案 0 :(得分:1)

使用LayoutManager控制Swing中子元素的布局。

  • BoxLayout - 单行或单列。这对你的目的有好处..
  • BorderLayout - 左侧,右侧,顶部,底部边框(任意或全部)的中心位置。
  • GridBagLayout - 网格。

左侧面板(未调整大小)可以使用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方法可以引用该参数。

希望它有所帮助。如果您需要更多帮助,请添加评论我很乐意为您提供帮助。