1

鉴于我在下面的代码,无论我在其中有任何其他错误,我怎样才能在一个面板上获得两个图像?我必须让这个程序每个面板显示 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);
    }
}
4

2 回答 2

1

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

  • BoxLayout -- 单行或单列。这对你的目的有好处..
  • BorderLayout -- 居中,带有(任何或全部)左、右、上、下边框。
  • GridBagLayout——一个网格。

左侧面板(不调整大小)可以使用 BoxLayout。使用 X_AXIS 创建它以将这两个图像并排放置。

整体框架(特别是它的内容窗格)被指定为调整到右侧面板的大小。所以也许 BorderLayout 是最好的方法。左侧面板为 WES​​T 且不调整大小,右侧面板为 CENTER 并调整所有剩余区域的大小。

请参阅: http ://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

另一个注意事项:Swing 的推荐常量和方向命名已更改.. 与国际化等的文本方向更相关,而不是绝对方向。现在建议使用 LINE_AXIS 而不是 X_AXIS,尽管不太清楚。

我不知道您的教练将如何标记这样的区域,所以请注意。

于 2013-10-17T04:15:42.340 回答
0

正如 Thomas W 所说,确保您熟悉布局管理器。尤其是 GridLayout、BorderLayout 和 FlowLayout,因为它们通常可以让您创建几乎任何类型的布局。如果您想要更多控制并扩展您对布局管理器的理解,那么我建议您研究 GridBagLayout,它是最强大的布局管理器。回到你的问题,要让一个面板显示两个图像,你可以有一个面板,比如 Panel1,它使用只有 2 列的网格布局(查看 GridLayout 构造函数,它需要你想要的行数和列数)。然后,您可以创建另外两个面板并将它们添加到 Panel1,其中其他面板是扩展 JPanel 的 MyCustomPanel 类的一个实例,并且您覆盖 paintComponent(Graphics g) 方法以显示您想要的图像。

希望能帮助到你。如果您需要更多帮助,请添加评论,我很乐意提供帮助。

于 2013-10-17T14:41:17.837 回答