ordering image and text in jbutton

前端 未结 2 1490
天命终不由人
天命终不由人 2021-01-28 02:44

I am attempting to overlay the text on a JButton over an ImageIcon that is behind it. However, when the imageIcon is added, the text dissapears. Is there any way to specify the

相关标签:
2条回答
  • 2021-01-28 03:29

    First of all, I see you're calling this method: boardArray[x][y].setLocation(locationX, locationY);

    .setLocation(...) indicates you're using a null layout, please read Null layout is evil and Why is it frowned upon to use a null layout in Swing? to know why you should avoid its use.

    For creating a Chess board, I'd be using GridLayout, please read how to use the different layout managers

    Now, to overlay text over the icon, you only need to call JButton#setHorizontalAlignment(...) method and pass SwingConstants.CENTER as the parameter.

    For example:

    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);
        }
    }
    

    Which gives the following output:

    For your future questions, please read how to make a valid Minimal, Complete and Verifiable Example (MCVE) that demonstrates your issue and your best try to solve it yourself, the code I posted is a good example of it, as you can copy-paste it and see the same result as I

    0 讨论(0)
  • 2021-01-28 03:45

    Use the setComponentZOrder(...) method of the Container class. This will enable you to set the Z-index of the components to set them in what ever order you like. Look also this

    0 讨论(0)
提交回复
热议问题