在jbutton中订购图像和文本

时间:2017-06-19 17:26:18

标签: java swing jframe jbutton chess

我试图将JButton上的文本叠加在它后面的ImageIcon上。但是,添加imageIcon时,文本会消失。有没有办法指定它显示的顺序? 下面,我试图单独添加图像和文本,看看是否会影响它,但没有运气。 任何人都可以帮助我吗?

  "scripts": {
    "heroku-postbuild": "npm --prefix frontend run installAndCompile && npm --prefix mockserver run installAndCompile",
    "start": "npm --prefix mockserver start"
  },

2 个答案:

答案 0 :(得分:2)

首先,我发现您正在调用此方法:boardArray[x][y].setLocation(locationX, locationY);

.setLocation(...)表示您使用null布局,请阅读Null layout is evilWhy is it frowned upon to use a null layout in Swing?以了解您应该避免使用它的原因。

为了创建国际象棋棋盘,我正在使用GridLayout,请阅读如何使用不同的layout managers

现在,要在图标上叠加文字,您只需调用JButton#setHorizontalAlignment(...)方法并传递SwingConstants.CENTER作为参数。

例如:

import java.awt.Color;
import java.awt.Font;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

public class ButtonWithImageAndText {
    private JFrame frame;
    private JButton button;
    private Icon icon;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new ButtonWithImageAndText().createAndShowGui());
    }

    private void createAndShowGui() {
        frame = new JFrame(getClass().getSimpleName());
        try {
            icon = new ImageIcon(ImageIO.read(getClass().getResource("up.jpg")));
        } catch (IOException e) {
            e.printStackTrace();
        }
        button = new JButton();

        button.setIcon(icon);

        button.setText("Click me!");
        button.setHorizontalTextPosition(SwingConstants.CENTER);
        button.setFont(new Font("Arial", Font.PLAIN, 40));
        button.setForeground(Color.RED);

        frame.add(button);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

其中给出了以下输出:

enter image description here

对于您将来的问题,请阅读如何制作有效的Minimal, Complete and Verifiable Example (MCVE)来证明您的问题并尽最大努力自己解决,我发布的代码就是一个很好的例子,因为您可以复制粘贴它和我看到的结果相同

答案 1 :(得分:0)

使用Container类的setComponentZOrder(...)方法。这将使您能够设置组件的Z-index以按照您喜欢的顺序设置它们。另请看this