2013-05-02 79 views
0

所以我一直在爲此工作了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

後,我讓我的形象的工作,我需要弄清楚如何獲得自定義字體(在自由的__ TTF)等等如果你也有一些資源,我會很感激。

+1

這是怎麼回事的問題不同,那麼你問4天前的一個?那麼你得到了工作代碼,那麼爲什麼不從工作代碼開始呢?這浪費了人們回答這個問題的時間,順便提一下你在最後一篇文章中提出的建議。 – camickr 2013-05-02 04:53:39

+0

如果您注意到,我的很多代碼都是基於2天前我的問題的答案。這是我的一個不同的問題,因爲這一個主要是我不能得到第二個圖像工作... – Hathor 2013-05-02 04:58:54

+0

這是它是基於解決方案的問題,但你沒有完全按照解決方案,現在你要求我們花時間爲您調試代碼。例如,您沒有設置背景圖片的佈局。您沒有像在另一個示例中那樣設置組件不透明。 – camickr 2013-05-02 05:06:24

回答

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 hereenter image description here

上面的兩張圖片是沒有滾動面板,並滾動窗格。正如你所看到的,第二個圖像出現在滾動窗格下面(或通過它)。

你的問題是兩個fourRowsallContent是不透明的(非透明),這意味着當你他們添加到滾動窗格儘管滾動窗格和視口的透明,fourRowsallContent打算阻止它。

您需要設置fourRowsallContent是透明的(setOpaque(false)

+0

所以現在就是問題出現的地方。該代碼允許scrollPane和warlordsLogo工作,但隨後會禁用背景圖像。 另外,我會嘗試一下,而不是讓我的scrollPane透明,爲它定製外觀。 圖像加載正常。 – Hathor 2013-05-02 04:25:06

+0

請參閱「其他」部分...您也可以使用其他佈局管理器 – MadProgrammer 2013-05-02 04:27:22

+0

您可以重新說明您的附加部分嗎?現在,無視我的scrollPane,如果這很麻煩,我會立即刪除它。主要的一點是,我想要同時獲得兩張圖片,但這並不奏效。 JScrollPane,我可以在之後修復。 – Hathor 2013-05-02 04:30:36