2013-10-17 17 views
1

鑑於我的代碼如下,無論我在其中有任何其他錯誤,我如何在一個面板上獲得兩個圖像?我必須讓這個程序顯示每個面板4個圖像,第一個面板並排放置,第二個面板可以拖動和調整大小?我不太清楚如何去做這件事。我可以通過4個面板獲得全部4張圖片,但這不屬於作業內容。謝謝!!在面板中使用圖像

import java.awt.*; 
import javax.swing.*; 
public class TwoPanels 
{ 
//----------------------------------------------------------------- 
// Creates and displays the primary application frame. 
//----------------------------------------------------------------- 
public static void main (String[] args) 
    { 

    JFrame frame = new JFrame ("Label Demo"); 
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 

    ImageIcon icon1 = new ImageIcon ("coin.jpg"); 
    ImageIcon icon2 = new ImageIcon ("coke.jpg"); 
    ImageIcon icon3 = new ImageIcon ("shuttle.jpg"); 
    ImageIcon icon4 = new ImageIcon ("sun.jpg"); 




    JLabel label1, label2; 
    label1 = new JLabel (icon1, SwingConstants.CENTER); 
    label1.setHorizontalTextPosition (SwingConstants.LEFT); 
    label1.setVerticalTextPosition (SwingConstants.BOTTOM); 
    label1 = new JLabel (icon2, SwingConstants.CENTER); 


    label2 = new JLabel (icon3, SwingConstants.CENTER); 
    label2.setHorizontalTextPosition (SwingConstants.CENTER); 
    label2.setVerticalTextPosition (SwingConstants.BOTTOM); 
    label2 = new JLabel (icon4, SwingConstants.CENTER); 


    JPanel panel = new JPanel(); 
    panel.setBackground (Color.cyan); 
    panel.setPreferredSize (new Dimension (960, 640)); 
    panel.add (label1); 
    panel.add (label2); 

    frame.getContentPane().add(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
} 
+0

*「第一個面板將它們並排放置,第二個面板可以拖動和調整大小?」DYM面板應該在調整「JFrame」大小時調整大小?使用J2SE相對容易。除非使用類似'JSplitPane'的東西,否則可以調整獨立於頂層容器的面板更爲棘手。 –

回答

1

使用LayoutManager來控制Swing中子元素的佈局。

  • BoxLayout - 單行或單列。這對你的目的是有好處的。
  • BorderLayout - 中央(任意或全部)左,右,上,下邊界。
  • GridBagLayout - 一個網格。

左側面板(不調整大小)可以使用BoxLayout。使用X_AXIS創建它以並排放置這兩個圖像。

框架整體(特別是它的內容窗格)被指定爲調整到右側面板..所以也許一個BorderLayout是最好的方式來做到這一點。左側面板將爲WEST,而不是調整大小,右側面板將爲CENTER,並調整剩餘區域的大小。

參見:http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

另外一個注:建議常數擺動方向&命名已經改變了..是相對更文字方向爲國際等,而不是絕對的方向。現在推薦使用LINE_AXIS而不是X_AXIS,但不太清楚。

我不知道你的導師將如何標記這樣的區域,所以只是要知道。

0

正如Thomas W所說的,確保您熟悉佈局管理器。特別是GridLayout,BorderLayout和FlowLayout,因爲它們通常會讓你創建幾乎所有你想要的佈局。如果你想要更多的控制並且擴展你對佈局管理者的理解,那麼我建議你看看GridBagLayout,它是最強大的佈局管理器。爲了回到你的問題,爲了使面板顯示兩個圖像,你可以有一個面板,例如Panel1,它使用只有2列的gridlayout(查看GridLayout構造函數,它需要行數和列數)。然後,您可以創建另外兩個面板並將它們添加到Panel1,其他面板是MyCustomPanel類的一個實例,它擴展了JPanel,並覆蓋paintComponent(Graphics g)方法以顯示所需的圖像。 MyCustomPanel構造函數可以包含paintComponent可以引用的方法的Image參數。

希望它有幫助。如果您需要更多幫助,請添加評論我很樂意提供幫助。