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

时间:2013-05-02 04:08:28

标签: java image fonts

所以我现在已经工作了2天了,我已经掌握了java.swing的基础知识(我希望,至少,当我2天前开始学习它时。) 无论如何,我成功加载了背景图像,但我似乎无法让前景工作。我不确定你需要什么代码,所以我会发布所有代码。当你看一下它时,我是否正确设置了我的JPanels? (特别是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),所以如果你也有一些资源,我会很感激。

1 个答案:

答案 0 :(得分:1)

我看到它的方式(假设图像正确加载)......

您创建背景图片......

warlordsBackground = new JLabel(backgroundIcon);

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

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

其他

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

enter image description here enter image description here

上面的两张图片没有滚动窗格和滚动窗格。如您所见,第二个图像显示在滚动窗格下方(或通过它)。

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

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