0

所以我决定自己学习Java。每次 Elipse 崩溃时,我都会更加后悔这个决定。幸运的是,我实际上已经设法让我自己造成的项目的这一部分真正“工作”,但显然是自学的,我很确定我在布局中犯了很多错误,并且

总的来说,该程序将创建一个 JFrame,然后将一个 JscrollPane 粘贴到其中插入一个 JPanel (wrapPage) 的内部。然后,它循环通过一个生成 TMTile 对象数组的过程,这些对象是扩展的 JPanel,包含从 jpg 图像的源文件夹中绘制的平铺图像。完成后,它使用 GridBagLayout 将该数组作为网格放置在 wrapPage Jpanel 中,从而形成一个漂亮的小完美迷宫。

这一切都完美无缺,但最大的失望是用于创建瓷砖的图像大小决定了一切。我一生都无法弄清楚如何缩放图像,并且努力寻找合适的过程只能让我找到创建新图像文件或在拉伸和平铺图像之间交替以适应其包含组件或建议的方法只是无法跟随以挽救我的生命。

幸运的是。图像处理是 TMTile 类文件的一部分!这意味着我可以向您展示整个相关的脚本;

导入以下内容以在此文件中使用

来自 java.awt:颜色、GridBagConstraints、GridBagLayout、
来自 javax.swing 的插图:ImageIcon、JLabel、JPanel

public class TMTile extends JPanel
{
private static final long serialVersionUID = 1L;

private int paths; // values 0 to 15, uses bitwise & | to set or check open paths

private JLabel tileWrap; // to contain the ImageIcon
private ImageIcon tileImg; // the image to be used

GridBagConstraints bag;

public TMTile( int inDir ) // called by maze constructor
{
    paths = inDir;
    this.setBackground( Color.RED ); // so I can tell if the image didn't load right
    this.setLayout( new GridBagLayout() ); // GridBagLayout is probably overkill but it what I am most familiar with now.

    bag = new GridBagConstraints();
    bag.insets = new Insets( 0, 0, 0, 0 );

    tileImg = tileImage( paths );

    tileWrap = new JLabel( "", tileImg, JLabel.CENTER );

    this.add( tileWrap, bag );
}


public void open( int inDir ) // called by maze constructor when tile value changes resulting from the perfect maze backtrack method
{
    paths = paths | inDir;

    tileImg = tileImage( paths );

    tileWrap.setIcon( tileImg );
}


private ImageIcon tileImage( int paths ) // created to cut down on duplicate code and make updating easier
{
    String inEnd;

    if(paths < 10)
    {
        inEnd = "0"+ paths;
    }
    else
    {
        inEnd = ""+ paths;
    }

    ImageIcon tileImg = new ImageIcon( "imgs/MAZE_"+ inEnd +".jpg" );

    System.out.println( "imgs/MAZE_"+ inEnd +".jpg" );

    Image newimg = tileImg.getImage().getScaledInstance( 40, 40, java.awt.Image.SCALE_DEFAULT );

    tileImg = new ImageIcon( newimg );

    return tileImg;
}


public int getOpen()
{
    return paths;
}
}

多亏了 nachokk 和 MadProgrammer,我现在再次拥有了一个可以工作的迷宫程序,并且迷宫图块是可扩展的。这只是留下了最终目标,即取消单个平铺 .jpgs 并切换到单个图像文件,其中所有 16 个都存储在其中。

我想要的是能够利用单个大图像文件,该文件分为 16 个部分,每个图块值 1 个部分。我开始朝着这个目标努力,但不得不很快放弃它,因为我无法弄清楚如何只显示所需的图像部分,这也需要以上述方式进行缩放。

由于我仍在学习 Java,因此欢迎对任何替代方案提出建议,但理想情况下,我很想知道如何按计划完成此任务。

4

0 回答 0