【问题标题】:Java layout when using JScrollPane使用 JScrollPane 时的 Java 布局
【发布时间】:2016-09-05 02:34:57
【问题描述】:

这是我的代码

private static KeyEvent e;
private static String text1 = null;
private static String text = null;

  public fysikdel() {
    super("Fysikformler");
    setSize(700, 502);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    init();
    setResizable(true);
    setVisible(true);
  }

  public void init() {
    JPanel main = new JPanel();
    JPanel p = new JPanel();
    CardLayout c1 = new CardLayout();

    JScrollPane scrollpane = new JScrollPane(p);

    JPanel Mekanik = new JPanel();
    p.setSize(700, 502);
    Mekanik.setLayout(new FlowLayout());

    //637*237
    ImageIcon likformigrorelsei = new ImageIcon();
    JLabel likformigrorelsel = new JLabel();

    ImageIcon lagesenergii = new ImageIcon();
    JLabel lagesenergil = new JLabel();

    ImageIcon a = new ImageIcon();
    JLabel aa = new JLabel();

    ImageIcon b = new ImageIcon();
    JLabel bb = new JLabel();

    try {
        likformigrorelsei = new ImageIcon(new URL("http://i.imgur.com/TZFkXYa.jpg"));
    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    }
    likformigrorelsel.setIcon(likformigrorelsei);

    try {
        lagesenergii = new ImageIcon(new URL("http://i.imgur.com/TZFkXYa.jpg"));
    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    }
    lagesenergil.setIcon(lagesenergii);

    try {
        a = new ImageIcon(new URL("http://i.imgur.com/TZFkXYa.jpg"));
    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    }

    aa.setIcon(a);

    try {
        b = new ImageIcon(new URL("http://i.imgur.com/TZFkXYa.jpg"));
    } catch (MalformedURLException e1) {
        e1.printStackTrace();
    }

    bb.setIcon(b);

    Mekanik.add(likformigrorelsel);
    Mekanik.add(lagesenergil);
    Mekanik.add(aa);
    Mekanik.add(bb);

    JPanel Tryck = new JPanel();

    main.setLayout(new GridLayout(1,1));
    p.setLayout(c1);

    this.add(main);

    main.add(scrollpane);

    p.add(Mekanik, "1");
    p.add(Tryck, "2");
    c1.show(p, "1");

当我添加更多图片时,我希望它们从左到右填充,直到填充一行,然后填充下一行。目前它只是继续填充第一行。

如果我添加

 scrollpane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_NEVER); 

它只是删除了水平滚动条,但图片仍然在一行结束。

我不知道出了什么问题。感谢您的帮助!

【问题讨论】:

标签: java swing layout jscrollpane


【解决方案1】:

因此,您将所有图像放在使用FlowLayoutMekanik 面板中。正如the java tutorial 所说,

The FlowLayout class puts components in a row, sized at their preferred size

这显然不是你想要的。因此,您必须更改面板使用的布局。

在我看来,GridLayout 更适合您的问题。

【讨论】:

  • GridLayout 不能解决问题,因为您需要对列数进行硬编码。随着框架宽度的变化,每行的图像数量也可能发生变化。注释中建议的WrapLayout 允许组件根据需要换行到下一行。
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 2012-08-13
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 2010-10-07
相关资源
最近更新 更多