繁体   English   中英

如何将图像添加到JPanel中的JPanel?

[英]How to add an image to JPanel that is in a JPanel?

我总共有7个JPanel容器。 我想添加我生成的png图像,或者在JPanel(imagePan)的按钮(充电器图像)的帮助下对其进行缓冲

到目前为止,我在Swing教程中看到的大多数示例都使用ImageIcon

  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

如何正确地将图像添加到Jpanel?

  1. 创建一个ImageIcon
  2. 将图标添加到JLabel
  3. 将标签添加到JPanel

阅读Swing教程中有关如何使用图标的部分, 获取更多信息和工作示例。

另外,从您发布的代码中删除所有setPreferredSize()语句。 布局管理器将确定组件的首选大小。 Swing旨在与布局管理器一起使用。 让布局管理器完成其工作。

console = new JTextArea();

创建JTextArea时,请执行以下操作:

console = new JTextArea(5, 30);

将会建议大小为5行30列。 现在,布局管理器可以基于此信息来计算首选大小。

private BorderLayout BorderGlobalePan, BorderSecondPane, BorderManipPane, ...

变量名称不应以大写字母开头。 您的大多数变量都是正确的,但并非全部正确。 始终如一!!!

frame.setSize(1024, 600);

不要硬编码一个尺寸。 您不知道我的计算机的分辨率是多少。 而是使用pack()方法,让布局管理器完成工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM