[英]How to add an image to JPanel that is in a JPanel?
我总共有7个JPanel
容器。 我想添加我生成的png图像,或者在JPanel(imagePan)的按钮(充电器图像)的帮助下对其进行缓冲
到目前为止,我在Swing教程中看到的大多数示例都使用ImageIcon
在这里,您会找到以下窗口的代码:
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);
}
如何正确地将图像添加到Jpanel?
ImageIcon
。 JLabel
。 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.