当前位置: 首页 > 知识库问答 >
问题:

创建具有多个可选图像项的JDialog

赫连飞沉
2023-03-14

我试图创建一个JDialog框架,它将有一个背景图像和一个交互式JPanel。在这种情况下,JDialog将代表一个“战斗”领域,单位将能够被选择和移动。游戏是以太空为基础的,所以会有一个船的阵列列表,可能还有一个星球物体需要防御。

我已经能够重写paintComponent来绘制一个表示“行星”的粗糙圆圈,但无法获得要显示的背景JLabel图像。然后我可以显示背景JLabel,但看不到圆圈。理想情况下,我想用每个船类型的实际图像替换圆圈,并为行星唯一。如果有更好的方法来实现这一点,除了使用jDialog/jLayered/Customer JPanel之外,我还愿意使用其他方法。我已经在这上面工作了好几个小时了。

我创建了一个JDialog,添加了一个JLayeredPane,并在其中设置了一个JLabel作为后台。我编写了一个扩展JPanel的自定义类,该类将添加到JLabel上方的JLayeredPane,它为行星和单位绘制圆圈。

public class SectorPnl extends javax.swing.JPanel implements MouseInputListener, ActionListener {

private int                 circleY, circleX, circleRadius;
private Sector              sector;
private Shape               planetShape;
private Shape               shipShape;
private Ship                ship;
private Planet              planet;
private Invasion            inv;
private ArrayList<ShipType> shipBuild;

public SectorPnl(Sector sector, Invasion inv)
{
    initComponents();

    this.sector = sector;
    this.inv = inv;
    this.planet = sector.getPlanet();
    shipBuild = new ArrayList();

    Timer update = new Timer(28, this);
    update.start();

    if ( sector.hasPlanet() )
    {
        circleRadius = (int) sector.getPlanet().getPlanetRadius();
        circleX = (int) sector.getPlanet().getPositionX();
        circleY = (int) sector.getPlanet().getPositionY();
        planetShape = new Ellipse2D.Double(circleX, circleY, circleRadius,
                circleRadius);
    }
}

@Override
public void paintComponent(Graphics g)
{
    super.paintComponents(g);

    Graphics2D g2 = (Graphics2D) g;

    if ( planetShape != null)
    {
        g2.setColor(Color.red);
        g2.fill(planetShape);
        g2.draw(planetShape);
    }
    if ( shipShape != null )
    {
        g2.setColor(Color.white);
        g2.fill(shipShape);
        g2.draw(shipShape);
    }
} 

下面是将其添加到JDialog的行:

  sectorDlg.setTitle(sector.getName());

  sectorDlg.setVisible(true);
  sectorDlg.setSize(800,800); 

  SectorPnl sectorPnl = new SectorPnl(sector, inv);
  sectorPnl.addMouseListener(sectorPnl);
  sectorPnl.addMouseMotionListener(sectorPnl);

  sectorLayer.setLayer(sectorPnl, 100);
  sectorLayer.setBounds(0, 0, 800, 800);

共有1个答案

邓德厚
2023-03-14

JLabel可以同时显示图标和文本,但我认为必须指定图标和文本的相对位置。

ImageIcon icon = createImageIcon("images/middle.gif");
. . .
label1 = new JLabel("Image and Text",
                    icon,
                    JLabel.CENTER);
//Set the position of the text, relative to the icon:
label1.setVerticalTextPosition(JLabel.BOTTOM);
label1.setHorizontalTextPosition(JLabel.CENTER);

这是摘自Oracle的《如何使用标签》。

我不知道如果你尝试设置背景和前景色会发生什么。

 类似资料:
  • 我的问题是--如何创建自定义列表视图,而不仅仅是重复一个自定义视图,而是像在Instagram或其他应用程序中,列表包括其他视图,这看起来就像滚动视图和列表视图android其他视图一样,但Roman Guy说“在滚动视图中的列表视图是一种非常糟糕的方式”,我同意这一点,不要相信谷歌使用这种方式... 使用ListView或Recolyer View实现此功能的最佳方法是什么

  • 问题内容: 我正在尝试建立一个简单的Java程序,该程序可以从其他多个图像(jpg)创建一个动画gif。谁能给我一个有关如何在Java中实现此目标的信息?我已经搜索过Google,但找不到任何真正有用的信息。 感谢你们! 问题答案: 这里有一个类的示例,该类从不同的图像创建动画的gif: 链接 编辑:链接似乎已死。 无论如何,为了清楚起见,这段代码是由Elliot Kroo完成的。 编辑2:感谢您

  • 我看到过许多开发人员发布的问题(Android Studio将2.AAR合并为一个或其他),但我还没有看到一个明确的答复,使我能够创建一个包含一个或多个AAR或jar的AAR(我可以使用jar,因为我不需要共享任何资源;只需要共享类)。以下是我的图书馆项目的应用程序分级: 我读过关于传递依赖的文章,但我找不到一个可以帮助解决我的情况的示例实现。

  • 我对pytest的一个命令行参数没有问题。 运行程序时: 我得到了预期的回应: 当我尝试多个参数时,我会遇到问题 _____________________________________设置测试应答器2时出错/usr/local/penguin/home/px09/p001/test-suite.py,第9行def测试应答器2(cmdopt2):未找到E夹具“cmdopt2” /usr/loca

  • 让我知道如何完成它。 总共有3个街区。。1.标题2.导航3.主要内容。。 导航块应该是多帧的...每次你选择一个选项,它需要改变... 它必须更像一个菜单导航 导入随机导入wx 类TabPanel1(wx.面板): #---------------------------------------------------------------------- def init(自我,父): """"

  • 我有0编码知识,但希望你们可以协助修改我在网上找到的代码,以创建多个按钮来执行不同的bat文件。我会将其保存为hta文件,以便在win shell环境中运行。谢谢!!!