0

したがって、ボタンとして使用しているJLabelを拡張するクラスがあり(clicklistenerクラスを使用)、ラベルに背景画像を追加しようとしています(以下を参照)が、このラベルを使用するとテキストが右にずれます画像の。画像を実際の背景として使用する方法はありますか? ボタンごとに個別の画像を作成することは避けたいと思います。

public class DButton 
  extends JLabel
{

  URL imgPath;
  ImageIcon img;

  public DButton(int width, int height)
  {
      this.setOpaque(true);
      imgPath = getClass().getResource("/img/MainMenuButton.png");
      if(imgPath != null)
      {
          img = new ImageIcon(imgPath);
          this.setIcon(img);
      }else 
      {
          System.err.println("Cant find file");
      }
  }
  public DButton(int width, int height, String text)
  {
      this(width, height);
      this.setText(text);
  }    
}

編集:迅速な対応をありがとう、私はそれを理解しました(垂直方向と水平方向の配置を設定します)

4

3 に答える 3

2

ラベルの垂直方向と水平方向のプロパティを調整してみませんか?

ここに画像の説明を入力

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class BackgroundLabel {

    public static void main(String[] args) {
        new BackgroundLabel();
    }

    public BackgroundLabel() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new FlowLayout(FlowLayout.CENTER));
            try {
                BufferedImage icon = ImageIO.read(new File("Pony.png"));
                JLabel label = new JLabel("Flying Ponies");
                label.setIcon(new ImageIcon(icon));
                label.setHorizontalAlignment(JLabel.CENTER);
                label.setVerticalAlignment(JLabel.CENTER);
                label.setHorizontalTextPosition(JLabel.CENTER);
                label.setVerticalTextPosition(JLabel.CENTER);
                add(label);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }

}
于 2013-04-12T00:58:50.027 に答える
1

ラベルのペイント メソッドをオーバーライドする必要があります。

@Override
protected void paintComponent(Graphics g) {
    g.drawImage(imgPath, 0, 0, this);
    super.paintComponent(g);
}
于 2013-04-12T00:49:39.750 に答える
1

img = new ImageIcon(imgPath);

これを試して

image = img.getImage()
graphics = image.getGraphics()
graphics.drawString("Text", 0, 0) 
于 2013-04-12T00:49:42.070 に答える