所以我现在已经工作了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。我需要做点什么,所以不要介意。 我设置了这样的项目文件,如果有帮助的话 -
在我的图像工作后,我需要弄清楚如何获取自定义字体(BEBAS __。ttf),所以如果你也有一些资源,我会很感激。
答案 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);
其他强>
现在,根据您的代码,您似乎想要使滚动窗格透明,但是您添加到滚动窗格的所有内容都不是。 fourRows
和allContent
都是不透明的......
上面的两张图片没有滚动窗格和滚动窗格。如您所见,第二个图像显示在滚动窗格下方(或通过它)。
您遇到的问题是fourRows
和allContent
都是不透明的(不透明),这意味着当您将它们添加到滚动窗格时,尽管滚动窗格和视图端口是透明的,fourRows
和allContent
会阻止它。
您需要将fourRows
和allContent
设置为透明(setOpaque(false)
)