java - 添加图像(我做错了什么?)

标签 java image fonts

所以我已经为此工作了 2 天,并且我已经掌握了 java.swing 的基础知识(我希望,至少,因为我在 2 天前开始学习它。) 无论如何,我成功加载了背景图像,但我似乎无法让前景图像工作。我不确定您需要什么代码,所以我将发布所有代码。当您查看它时,我是否正确设置了 JPanel? (特别是 allContent 和 fourRows 。)

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.util.*;
import junit.framework.Test;


public class MainFrame {


   //Variables
   private static final String IMAGE_PATH = "imageFolder/warlordsOrganizerBackground.png";
   private static final String IMAGE_PATH2 = "imageFolder/warlordsLogo.png";
   public static JFrame programFrame;
   public static JLabel warlordsBackground;
   public static JLabel warlordsLogo;
   public static JPanel allContent;
   public static JPanel fourRows;
   public static JScrollPane scrollPane;



   //Making the parts for the GUI
   public static void createGUI(){

  //programFrame Title and Layout
  programFrame = new JFrame("Warlords Organizer");
  programFrame.setLayout(new BorderLayout());

  Icon backgroundIcon = new ImageIcon(IMAGE_PATH);
  warlordsBackground = new JLabel(backgroundIcon);

  File imageFile = new File(IMAGE_PATH);
  File imageFile2 = new File(IMAGE_PATH2);

  //Warlords Logo JLabel
  Icon logoIcon = new ImageIcon(IMAGE_PATH2);
  warlordsLogo = new JLabel(logoIcon);

  //New JPanel for GridLayout 
  fourRows = new JPanel(new GridLayout(0,4));
  fourRows.setLayout(new GridLayout());

  //Makes the Initial BorderLayout (Using allContent JPanel)
  allContent = new JPanel();
  allContent.setLayout(new BorderLayout());
  allContent.add(warlordsLogo, BorderLayout.NORTH);
  allContent.setVisible(true);
  allContent.add(fourRows, BorderLayout.CENTER);

  //Add ScrollPane / MAKE SURE TO ADD TO new JScrollPane WHERE IT NEEDS TO BE / TEXT
  scrollPane = new JScrollPane(allContent);
  scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  scrollPane.setOpaque(false);
  scrollPane.getViewport().setOpaque(false);

  //JFrame programFrame Constructors
  programFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  programFrame.setContentPane(warlordsBackground);
  programFrame.pack();
  programFrame.setVisible(true);
  programFrame.setResizable(false);


  } // public static void createGUI() Closing

  public static void main(String[] args) {
  javax.swing.SwingUtilities.invokeLater(new Runnable() {
     public void run() {
        createGUI();
     } //public void run() Closing
  });
 }

 }

最后是我的 JScrollPane。我需要做点什么,所以别介意。 我这样设置我的项目文件,如果有帮助的话 -

enter image description here

在我的图像正常工作后,我需要弄清楚如何获取自定义字体(BEBAS__.ttf),因此如果您也有一些相关资源,我将不胜感激。

最佳答案

我的看法(假设图像加载正确)...

您创建背景图像...

warlordsBackground = new JLabel(backgroundIcon);

稍后,您将其设置为框架的内容 Pane ...

programFrame.setContentPane(warlordsBackground);

但是你没有向它或框架添加任何内容......

现在,您可能遇到的小问题是 JLabel 实际上没有布局管理器,因此即使您向其中添加了任何内容,也不会显示任何内容...

尝试做一些更像......的事情

programFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
programFrame.setContentPane(warlordsBackground);
programFrame.setLayout(new BorderLayout());
programFrame.add(scrollPane);
programFrame.pack();
programFrame.setVisible(true);
programFrame.setResizable(false);

附加

现在,根据您的代码,您似乎希望使滚动 Pane 透明,但添加到滚动 Pane 的所有内容都不是。 fourRowsallContent 都是不透明的...

enter image description here enter image description here

上面的两张图片是不带滚动 Pane 和带滚动 Pane 的。如您所见,第二个图像出现在滚动 Pane 下方(或穿过滚动 Pane )。

您遇到的问题是 fourRowsallContent 都是不透明的(不透明),这意味着当您将它们添加到滚动 Pane 时,尽管滚动 Pane 和 View 端口是透明的,fourRowsallContent 将阻止它。

您需要将 fourRowsallContent 设置为透明 (setOpaque(false))

关于java - 添加图像(我做错了什么?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16330188/

相关文章:

amazon-s3 - 对 CloudFront 的字体请求为 "(cancelled)"

java - 通过 mongoDB Java 驱动获取 mongoStat

java - Netbeans javac 命令

JavaScript setInterval 动画在控制台中创建乱码,但没有错误

c# - 在 C# 类库的弹出窗口中显示图像

flutter - 如何创建一个TextField来更改用户输入的字体和颜色?

java.lang.NoClassDefFoundError : HttpServletRequest 错误

java - 用 Java 中的流 API 调用替换 for-each 循环

python - 如何使用python从图像中提取文本或数字

java - 无法使用 JComboBoxes 更改 JTextArea 中的字体和字体大小