Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JPanel中的组件上放置JLabel_Java_Swing_Jpanel_Awt - Fatal编程技术网

Java 在JPanel中的组件上放置JLabel

Java 在JPanel中的组件上放置JLabel,java,swing,jpanel,awt,Java,Swing,Jpanel,Awt,我有一个JPanel,它包含一个组件imageWindow(的对象),现在我想在这个imageWindow的中心放置一个标签标签,但我不能这样做 JPanel imagePanel = new JPanel(); imagePanel.setLayout(new GridBagLayout()); imagePanel.add(ic); //ic is imageWindow obj JLabel l1=new JLabel("First Label.");

我有一个JPanel,它包含一个组件imageWindow(的对象),现在我想在这个imageWindow的中心放置一个标签标签,但我不能这样做

    JPanel imagePanel = new JPanel();
    imagePanel.setLayout(new GridBagLayout());
    imagePanel.add(ic);  //ic is imageWindow obj
    JLabel l1=new JLabel("First Label.");  

    JPanel example =new JPanel();
    example.add(l1);
    imagePanel.add(example);
我在这里做错的是我需要把标签贴在这里。


我想把标签放在中间,但它总是在右边,我做错了什么?

你可以在一个JPanel中显示图像,用它的paintComponent方法绘制图像,给同一个JPanel一个GridBagLayout,然后将JLabel添加到其中。或者类似地,您可以将图像显示为JLabel中的ImageIcon,为该JLabel提供GridBagLayout,并向其添加包含JLabel的文本

例如,在下面的代码中,我在JPanel的paintComponent方法中显示一个图像,给该面板一个GridBagLayout,然后在没有gridbag约束的相同的JPanel中添加一个JLabel,这将使JLabel在JPanel上居中:


您可以在一个JPanel中显示图像,该JPanel使用其paintComponent方法绘制图像,为同一个JPanel提供GridBagLayout,并向其添加JLabel。或者类似地,您可以将图像显示为JLabel中的ImageIcon,为该JLabel提供GridBagLayout,并向其添加包含JLabel的文本

例如,在下面的代码中,我在JPanel的paintComponent方法中显示一个图像,给该面板一个GridBagLayout,然后在没有gridbag约束的相同的JPanel中添加一个JLabel,这将使JLabel在JPanel上居中:


为了澄清,您希望标签位于imageWindow的顶部吗?您正试图通过重叠两个单独的JPanel来实现这一点?您可以在JPanel中显示图像,并使用其paintComponent方法绘制图像,为同一JPanel提供GridBagLayout,然后向其添加JLabel。或者类似地,您可以将图像显示为JLabel中的ImageIcon,为该JLabel提供GridBagLayout,并向其添加包含JLabel的文本,这是带有病毒包涵体的细胞的EM图像吗?@LukeThistlethwaite是的,我的目标是在imageWindow顶部贴上标签。@HoverCraftfullOfels我不能将图像显示为imageIcon,因为我有一堆图像,我使用imageWindow显示它,我在下面的滑块也滑动,下一个图像将显示从堆栈澄清,你想标签上的图像窗口的顶部?您正试图通过重叠两个单独的JPanel来实现这一点?您可以在JPanel中显示图像,并使用其paintComponent方法绘制图像,为同一JPanel提供GridBagLayout,然后向其添加JLabel。或者类似地,您可以将图像显示为JLabel中的ImageIcon,为该JLabel提供GridBagLayout,并向其添加包含JLabel的文本,这是带有病毒包涵体的细胞的EM图像吗?@LukeThistlethwaite是的,我的目标是将标签放在imageWindow的顶部。@HoverCraftfullOfels我不能将图像显示为imageIcon,因为我有一个图像堆栈,我使用imageWindow显示它,我还通过滑动滑块将下一个图像从堆栈中显示出来
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.*;

public class ImageFun extends JPanel {
    private static final String IMG_PATH = "https://aws.labome.com/figure/te-207-12.png";
    private static final String LABEL_TEXT = "Text is Centered";  // JLabel text
    private static final Font LABEL_FONT = new Font(Font.SANS_SERIF, Font.BOLD, 48);
    private static final Color LABEL_FG = Color.YELLOW;
    private BufferedImage img = null;  // our image

    public ImageFun(BufferedImage img) {
        this.img = img;
        setLayout(new GridBagLayout());

        // create JLabel 
        JLabel label = new JLabel(LABEL_TEXT);
        label.setFont(LABEL_FONT);
        label.setForeground(LABEL_FG);
        add(label);  // add without constraints
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (img != null) {
            // only draw if the image is not null
            g.drawImage(img, 0, 0, null);
        }
    }

    @Override
    public Dimension getPreferredSize() {
        if (isPreferredSizeSet() || img == null) {
            return super.getPreferredSize();
        }

        // size the JPanel to match that of the image
        int prefW = img.getWidth();
        int prefH = img.getHeight();
        return new Dimension(prefW, prefH);
    }

    private static void createAndShowGui() {

        BufferedImage bImg = null;
        try {
            // get an image
            URL imgUrl = new URL(IMG_PATH);
            bImg = ImageIO.read(imgUrl);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // shove the image into our JPanel
        ImageFun imageFun = new ImageFun(bImg);

        JFrame frame = new JFrame("Image Fun");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(imageFun);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

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