2017-04-11 101 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()方法,让布局经理完成他们的工作。