【问题标题】:Making a JLabel become another JLabel使一个 JLabel 成为另一个 JLabel
【发布时间】:2012-10-31 06:30:45
【问题描述】:

所以,这是我的问题。我有一个 JPanel,上面有一个 JLabel,我想要的是一旦单击 JLabel,它应该调整大小,(理想情况下它会随着它的比例而改变,但现在我使用的是一个常量值)。我已经返回了图像,现在我可以缩放它,但我无法让原来的 JLabel 变成新大小的。

所以这就是理想情况下应该发生的事情,e.getSource 应该成为新增加的 JLabel 大小。

我知道我已经很接近了,我做了一个 JOptionPane 作为调试语句,看看我是否可以增加大小,我可以。

为什么不能 ((JLabel)me.getSource = a; 我的新 JLabel 在哪里?

无论如何,这是我的代码:

请帮帮我。

public void mousePressed(MouseEvent me) {
        //GreetingCard.setBackground.findComponentAt(me.getX(), me.getY());
        //GreetingCard.setBackground.findComponentAt(me.getX(), me.getY)

      JLabel a= (JLabel) me.getSource();
      Icon icon = a.getIcon();

        int scale = 4;

        BufferedImage bi = new BufferedImage(
            scale*icon.getIconWidth(),
            scale*icon.getIconHeight(),
            BufferedImage.TYPE_INT_ARGB);
            Graphics2D g = bi.createGraphics();
            g.scale(scale,scale);
            icon.paintIcon(null,g,0,0);
            g.dispose();
            JLabel temp = new JLabel(new ImageIcon(bi));
            ((JLabel)me.getSource())= temp;

        JOptionPane.showMessageDialog(
            null,
            new JLabel(new ImageIcon(bi)));

      System.out.println("The size of the image is" + b.getIconWidth());
      initiateEvent = me;
        me.consume();



}

【问题讨论】:

  • 您想通过((JLabel)me.getSource())= temp; 语句实现什么目标? = 的左侧不允许使用表达式(例如((JLabel)me.getSource()))。您很可能需要获取事件源的父级,删除现有标签,然后添加新标签。

标签: image jlabel


【解决方案1】:

me.getSource() 返回一个 JLabel,它不返回一个可以分配新值的变量。

可能最好的方法不是创建新的 JLabel,而只是将新的 ImageIcon 分配给旧的 JLabel。

((JLabel)me.getSource()).setIcon(new ImageIcon(bi));

您还需要调用标签或面板 updateUI() 来强制“硬”重绘并调整大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多