2017-04-11 102 views
0

我總共有7個JPanel集裝箱。我想添加一個我生成的PNG圖像,或者藉助JPanel中的按鈕(充電器圖像)將其緩衝(012)使用ImageIcon如何將圖像添加到JPanel中的JPanel?

  1. 生成的圖像是在326X254
  2. 如何將圖像正確地添加到面板?

在這裏,你會發現代碼生成下面的窗口:

import java.awt.BorderLayout; 
    import java.awt.Dimension; 
    import java.awt.GridLayout; 
    import java.io.IOException; 
    import java.io.OutputStream; 
    import java.io.PrintStream; 

    import javax.swing.BorderFactory; 
    import javax.swing.Box; 
    import javax.swing.BoxLayout; 
    import javax.swing.ImageIcon; 
    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.JTextArea; 
    import javax.swing.SwingUtilities; 
    import javax.swing.border.Border; 

    public class View { 
    private JFrame frame; 
    private JPanel globalPan, firstHorisontalPan, secondhorisontalPan, 
    calibrationPan, imagePan, manipPan, solutionPan; // susp 
    private JButton raproche, ecarter, sauvgarder, demarrer, stop, charger; 
    private BorderLayout BorderGlobalePan, BorderSecondPane, BorderManipPane, 
    BorderFirstHorisontalPan, BorderResolPan, BorderCalibPan, 
    BorderChargerPan; 
    private JTextArea console; 
    private Box calibrationBox, solutionBox; 


    public void init() { 
    // declaration de JFrame 
    frame = new JFrame("Rubi's Cube IHM"); 

    // JPanle 
    globalPan = new JPanel(); 
    firstHorisontalPan = new JPanel(); 
    secondhorisontalPan = new JPanel(); 
    imagePan = new JPanel(); 
    manipPan = new JPanel(); 
    calibrationPan = new JPanel(); 
    solutionPan = new JPanel(); 

    // 
    calibrationBox = Box.createVerticalBox(); 
    solutionBox = Box.createVerticalBox(); 

    // borderLayout 
    BorderGlobalePan = new BorderLayout(); 
    BorderSecondPane = new BorderLayout(); 
    BorderManipPane = new BorderLayout(); 
    BorderFirstHorisontalPan = new BorderLayout(); 
    BorderResolPan = new BorderLayout(); 
    BorderCalibPan =new BorderLayout(); 
    BorderChargerPan = new BorderLayout(); 

    // JButton 
    raproche = new JButton("raprocher"); 
    ecarter = new JButton("ecarter"); 
    sauvgarder = new JButton("sauvgarder"); 
    demarrer = new JButton("demarrer"); 
    stop = new JButton("stop"); 
    charger = new JButton("charger image"); 

    console = new JTextArea(); 

    //add JPanel names 
    firstHorisontalPan.setBorder(BorderFactory.createTitledBorder("Etat")); 
    calibrationPan.setBorder(BorderFactory.createTitledBorder("calibration")); 
    solutionPan.setBorder(BorderFactory.createTitledBorder("résolution & manipulation")); 
    imagePan.setBorder(BorderFactory.createTitledBorder("visualisation")); 

    // definition of JButton size 
    raproche.setPreferredSize(new Dimension(200, 30)); 
    ecarter.setPreferredSize(new Dimension(200, 30)); 
    sauvgarder.setPreferredSize(new Dimension(200, 30)); 
    demarrer.setPreferredSize(new Dimension(200, 30)); 
    stop.setPreferredSize(new Dimension(200, 30)); 
    charger.setPreferredSize(new Dimension(200, 30)); 

    //definition of JPanel size 
    globalPan.setPreferredSize(new Dimension(1024, 600)); 
    firstHorisontalPan.setPreferredSize(new Dimension(1024, 130)); 
    secondhorisontalPan.setPreferredSize(new Dimension(1024, 480)); 
    imagePan.setPreferredSize(new Dimension(850, 480)); 
    manipPan.setPreferredSize(new Dimension(150, 480)); 
    calibrationPan.setPreferredSize(new Dimension(200, 200)); 
    solutionPan.setPreferredSize(new Dimension(200, 100)); 

    calibrationBox.setPreferredSize(new Dimension(200, 200)); 
    solutionBox.setPreferredSize(new Dimension(200, 100)); 

    firstHorisontalPan.setLayout(BorderFirstHorisontalPan); 
    firstHorisontalPan.add(console); 
    //image 



    // JPane calibration 
    calibrationBox.add(Box.createVerticalStrut(10)); 
    calibrationBox.add(raproche); 
    calibrationBox.add(Box.createVerticalStrut(10)); 
    calibrationBox.add(ecarter); 
    calibrationBox.add(Box.createVerticalStrut(10)); 
    calibrationBox.add(sauvgarder); 

    calibrationPan.setLayout(BorderCalibPan); 
    calibrationPan.add(calibrationBox, BorderLayout.CENTER); 

    // JPane resolution & manipulation 
    solutionBox.add(Box.createVerticalStrut(10)); 
    solutionBox.add(demarrer); 
    solutionBox.add(Box.createVerticalStrut(10)); 
    solutionBox.add(stop); 

    solutionPan.setLayout(BorderResolPan); 
    solutionPan.add(solutionBox, BorderLayout.CENTER); 


    //JPane ManipPane 
    manipPan.setLayout(BorderManipPane); 
    manipPan.add(calibrationPan, BorderLayout.NORTH); 
    BorderManipPane.setVgap(20); 
    manipPan.add(solutionPan, BorderLayout.CENTER); 

    //JPane secondPane 
    secondhorisontalPan.setLayout(BorderSecondPane); 
    secondhorisontalPan.add(manipPan, BorderLayout.WEST); 
    BorderSecondPane.setHgap(7); 
    secondhorisontalPan.add(imagePan, BorderLayout.CENTER); 

    //JPane GlobalHorisontalPane 
    globalPan.setLayout(BorderGlobalePan); 
    globalPan.add(firstHorisontalPan, BorderLayout.NORTH); 
    BorderGlobalePan.setVgap(10); 
    globalPan.add(secondhorisontalPan, BorderLayout.CENTER); 

    //Jpane imagePan 
    BorderChargerPan.setVgap(10); 
    imagePan.add(charger); 

    // window 
    frame.add(globalPan); 
    frame.setSize(1024, 600); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
    frame.setTitle("cubeBerry"); 
    frame.setResizable(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

IHM

回答

3

如何將圖像proprely添加到JPanel?

  1. 創建一個ImageIcon
  2. 將圖標添加到JLabel
  3. 將標籤添加到JPanel

請參閱How to Use Icons的Swing教程部分以獲取更多信息和工作示例。

此外,從您的發佈代碼中,擺脫所有setPreferredSize()陳述。佈局管理器將確定組件的首選大小。 Swing旨在與佈局經理一起使用。讓佈局經理完成工作。

console = new JTextArea(); 

當創建一個JTextArea這樣做:

console = new JTextArea(5, 30); 

該會建議的大小應該是5行30列。現在,佈局管理器可以根據這些信息計算出一個首選大小。

private BorderLayout BorderGlobalePan, BorderSecondPane, BorderManipPane, ... 

變量名不能以大寫字母開頭。你的大部分變量都是正確的,但不是全部。始終如一!!!

frame.setSize(1024, 600); 

不要硬編碼大小。你不知道我的電腦的分辨率是多少。請使用pack()方法,讓佈局經理完成他們的工作。