2014-03-04 109 views
0

去年我做了一些簡單的Java應用程序[我是一名工程專業的學生,​​我通過上一學期的課程愛上了Java] - 我學到了很多關於類,對象,聽衆和其他各種東西。問題是我必須使用不同尋常的庫(我認爲它們已經優化以縮短代碼的很長一段時間,並讓我們專注於面向對象的基礎知識) - 這裏是鏈接:http://useobjects.net/(從未在其他地方見過)。現在我正嘗試在Java中創建一個簡單的遊戲(紙牌遊戲,比如紙牌遊戲),而不使用這些庫 - 只使用swing和另一個衆所周知的「核心」Java庫 - 並且遇到各種問題(通常很少)主要是「每天」簡單的任務。簡單的Java遊戲 - 小問題

第一個問題 - 如何將文件中的圖像添加到Java中?比如說,我有班卡,可以顯示或恢復,我需要使用2張圖片(一張用於背面,一張用於正面);我找不到任何教程用BufferedImage,View,Image等等來解釋整個過程。 (相比之下,在上面提到的圖書館,它只是這樣的:。

ImageView cardBack = new ImageView(positionX, positionY, height, width, filepath, angle etc.); 

,並添加圖像和任務完成

第二個問題是關於主應用程序窗口,在我們的舊圖書館,它只是像這樣在主類:

MainWindow mainWindow = new MainWindow(title,height,width); 
GroupView mainGroup = mainWindow.getRootGroup(); 

但是,當我試圖找出任何有關創建一個窗口,我發現只有JFrame的解決方案,我想問你一個簡單的實現例如,也許如何(如果我應該創建一個「Main」類,其中JFrame只是一個元素,或者創建類MainWindow類並在此類中創建JFrame,並在Main中創建此類的實例,或者..簡單地說,我擔心,我的Java編碼知識和XP並不完全符合慣例,所以我以這種方式請求一些建議)。

非常感謝你。

+0

那麼你的問題是什麼? – NESPowerGlove

+0

@NESPowerGlove如何將文件中的圖像添加到java中,以及JFrame的簡單實現示例。不是有史以來格式最好的問題,但問題肯定存在。 – quazzieclodo

+0

搜索在Google上使用ImageIO加載BufferedImage,並查看官方的Oracle教程,瞭解如何使用Swing以及如何構建JFrame。 – NESPowerGlove

回答

0

,你可以用下面的代碼開始:

public static void show() throws Exception 
{ 
    final BufferedImage image = ImageIO.read(new File("<path>")); 

    JFrame window = new JFrame(); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setSize(300, 300); 

    window.setLayout(new BorderLayout()); 
    window.add(new JLabel("My Image name"), BorderLayout.NORTH); 
    window.add(new JImage(image), BorderLayout.CENTER); 

    window.setVisible(true); 
} 

static class JImage extends JPanel implements MouseListener 
{ 

    private BufferedImage image; 

    public JImage(BufferedImage image) 
    { 
     this.image = image; 
     addMouseListener(this); 

    } 

    @Override 
    protected void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, null); // see javadoc for more info on the parameters 
    } 

    @Override 
    public void mouseClicked(MouseEvent ev) 
    { 
     System.out.println(String.format("mouse clicked (x:%d, y:%s)", ev.getX(), ev.getY())); 
    } 

    @Override 
    public void mouseEntered(MouseEvent arg0) 
    {} 

    @Override 
    public void mouseExited(MouseEvent arg0) 
    {} 

    @Override 
    public void mousePressed(MouseEvent ev) 
    { 
     System.out.println(String.format("mouse pressed (x:%d, y:%s)", ev.getX(), ev.getY())); 
    } 

    @Override 
    public void mouseReleased(MouseEvent ev) 
    { 
     System.out.println(String.format("mouse released (x:%d, y:%s)", ev.getX(), ev.getY())); 
    } 
} 

這將創建一個包含圖像的頂部一個標籤一個簡單的窗口。 你應該考慮轉移到JavaFX,但我真的對客戶端java UI編程知之甚少。

+0

非常感謝您的時間,現在我要嘗試熟悉這些代碼並使用它。只是一個問題 - 正如我打算製作類似單人紙牌一樣,卡片(帶圖像)應該是鼠標可捕捉和可移動的 - 當圖像放入這種佈局時它會工作嗎?我不確定,如果我不是絕對錯誤的,但我猜((f.e)BorderLayout的部分不可能隨着鼠標點擊而移動。或者它只是MouseListener的魔力? (從來沒有應用過像這樣的東西,只在單一類中) – user3380075

+0

就像你看到的那樣,帶圖像的組件是JPanel的一個子類 - 它應該很容易附加一個MouseListener給它 - 但你應該嘗試一下: - ) –

+0

我編輯了我的原始答案,包括鼠標事件捕獲 –

0

「現在我試圖創建一個簡單的Java遊戲,(紙牌遊戲,說,像接龍),而不使用這些庫 - 只與搖擺和其它通常已知的‘核心’的Java庫」

首先您提供的代碼不是核心Java。這是JavaFX。如果你想學習Swing,Oracle tutorials是一個很好的開始。您可以在該鏈接中找到Swing 的選項JavaFX路徑

就圖像而言,您有選項。您可以將ImageIcon加載到JLabel,或者將其繪製到JPanelJComponent上。這兩種方法都可以在this thread

中可以看出,「如果我要創建一個‘主’類,其中將JFrame的只是一個因素,或使像主窗口和這個類中創建的JFrame,並創建一個實例這個類在主「

請參閱Extends JFrame vs. creating it inside the the program。如果您閱讀上述鏈接中的一些教程,只需查看代碼示例即可快速獲取良好實踐。