英文:
How do I create padding between icon images that are inside of JLabels
问题
我尝试创建一个具有以下布局的JFrame:期望效果
而我目前拥有的是这个:当前进展。如何在两个图像之间以及顶部和底部创建填充?我尝试使用空边框属性并设置左边和右边的值,但中间、顶部和底部的空白空间没有被创建。
英文:
I am trying to create a JFrame that has a layout like this image desired goal
and what I currently have is this current progress. How do I create padding between the two images as well as at the top and bottom? I have tried using the empty border property and setting the left and right at their respective values, but the gap of space in the middle, top, and bottom does not get created.
答案1
得分: 0
以下是您提供的代码部分的翻译:
使用EmptyBorder
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public class TestPane extends JPanel {
public TestPane() throws IOException {
setLayout(new BorderLayout());
JLabel header = new JLabel("Next");
header.setBorder(new EmptyBorder(4, 0, 4, 0));
header.setHorizontalAlignment(JLabel.CENTER);
header.setOpaque(true);
header.setBackground(Color.BLUE);
header.setForeground(Color.WHITE);
add(header, BorderLayout.NORTH);
JLabel footer = new JLabel("This is the way");
footer.setBorder(new EmptyBorder(4, 0, 4, 0));
footer.setHorizontalAlignment(JLabel.CENTER);
footer.setOpaque(true);
footer.setBackground(Color.BLUE);
footer.setForeground(Color.WHITE);
add(footer, BorderLayout.SOUTH);
BufferedImage leftImage = ImageIO.read(getClass().getResource("/images/Mando01.jpeg"));
BufferedImage rightImage = ImageIO.read(getClass().getResource("/images/Mando02.jpeg"));
JLabel leftLabel = new JLabel(new ImageIcon(leftImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JLabel rightLabel = new JLabel(new ImageIcon(rightImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
leftLabel.setBorder(new EmptyBorder(8, 8, 8, 4));
rightLabel.setBorder(new EmptyBorder(8, 4, 8, 8));
JPanel imagePane = new JPanel(new GridBagLayout());
imagePane.setBackground(Color.DARK_GRAY);
imagePane.add(leftLabel);
imagePane.add(rightLabel);
add(imagePane);
}
}
}
使用FlowLayout
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public class TestPane extends JPanel {
public TestPane() throws IOException {
setLayout(new BorderLayout());
JLabel header = new JLabel("Next");
header.setBorder(new EmptyBorder(4, 0, 4, 0));
header.setHorizontalAlignment(JLabel.CENTER);
header.setOpaque(true);
header.setBackground(Color.BLUE);
header.setForeground(Color.WHITE);
add(header, BorderLayout.NORTH);
JLabel footer = new JLabel("This is the way");
footer.setBorder(new EmptyBorder(4, 0, 4, 0));
footer.setHorizontalAlignment(JLabel.CENTER);
footer.setOpaque(true);
footer.setBackground(Color.BLUE);
footer.setForeground(Color.WHITE);
add(footer, BorderLayout.SOUTH);
BufferedImage leftImage = ImageIO.read(getClass().getResource("/images/Mando01.jpeg"));
BufferedImage rightImage = ImageIO.read(getClass().getResource("/images/Mando02.jpeg"));
JLabel leftLabel = new JLabel(new ImageIcon(leftImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JLabel rightLabel = new JLabel(new ImageIcon(rightImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JPanel imagePane = new JPanel(new FlowLayout(FlowLayout.CENTER, 8, 8));
imagePane.setBackground(Color.DARK_GRAY);
imagePane.add(leftLabel);
imagePane.add(rightLabel);
add(imagePane);
}
}
}
使用GridBagLayout
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = a JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public class TestPane extends JPanel {
public TestPane() throws IOException {
setLayout(new BorderLayout());
JLabel header = new JLabel("Next");
header.setBorder(new EmptyBorder(4, 0, 4, 0));
header.setHorizontalAlignment(JLabel.CENTER);
header.setOpaque(true);
header.setBackground(Color.BLUE);
header.setForeground(Color.WHITE);
add(header, BorderLayout.NORTH);
JLabel footer = new JLabel("This is the way");
footer.setBorder(new EmptyBorder(4, 0, 4, 0));
footer.setHorizontalAlignment(JLabel.CENTER);
footer.setOpaque(true);
footer.setBackground(Color.BLUE);
footer.setForeground(Color.WHITE);
add(footer, BorderLayout.SOUTH);
BufferedImage leftImage = ImageIO.read(getClass().getResource("/images/Mando01.jpeg"));
BufferedImage rightImage = ImageIO.read(getClass().getResource("/images/Mando02.jpeg"));
JLabel leftLabel = new JLabel(new ImageIcon(leftImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JLabel rightLabel = new JLabel(new ImageIcon(rightImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JPanel imagePane = new JPanel(new GridBagLayout());
imagePane.setBackground(Color.DARK_GRAY);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(8, 8, 8, 4);
imagePane.add(leftLabel, gbc);
gbc = new GridBagConstraints();
gbc.insets =
<details>
<summary>英文:</summary>
See:
* [Laying Out Components Within a Container](https://docs.oracle.com/javase/tutorial/uiswing/layout/index.html)
* [How to Use Borders](https://docs.oracle.com/javase/tutorial/uiswing/components/border.html)
for more details...
# Use an `EmptyBorder`
[![enter image description here][1]][1]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public class TestPane extends JPanel {
public TestPane() throws IOException {
setLayout(new BorderLayout());
JLabel header = new JLabel("Next");
header.setBorder(new EmptyBorder(4, 0, 4, 0));
header.setHorizontalAlignment(JLabel.CENTER);
header.setOpaque(true);
header.setBackground(Color.BLUE);
header.setForeground(Color.WHITE);
add(header, BorderLayout.NORTH);
JLabel footer = new JLabel("This is the way");
footer.setBorder(new EmptyBorder(4, 0, 4, 0));
footer.setHorizontalAlignment(JLabel.CENTER);
footer.setOpaque(true);
footer.setBackground(Color.BLUE);
footer.setForeground(Color.WHITE);
add(footer, BorderLayout.SOUTH);
BufferedImage leftImage = ImageIO.read(getClass().getResource("/images/Mando01.jpeg"));
BufferedImage rightImage = ImageIO.read(getClass().getResource("/images/Mando02.jpeg"));
JLabel leftLabel = new JLabel(new ImageIcon(leftImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JLabel rightLabel = new JLabel(new ImageIcon(rightImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
leftLabel.setBorder(new EmptyBorder(8, 8, 8, 4));
rightLabel.setBorder(new EmptyBorder(8, 4, 8, 8));
JPanel imagePane = new JPanel(new GridBagLayout());
imagePane.setBackground(Color.DARK_GRAY);
imagePane.add(leftLabel);
imagePane.add(rightLabel);
add(imagePane);
}
}
}
# Use a `FlowLayout`
[![enter image description here][2]][2]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public class TestPane extends JPanel {
public TestPane() throws IOException {
setLayout(new BorderLayout());
JLabel header = new JLabel("Next");
header.setBorder(new EmptyBorder(4, 0, 4, 0));
header.setHorizontalAlignment(JLabel.CENTER);
header.setOpaque(true);
header.setBackground(Color.BLUE);
header.setForeground(Color.WHITE);
add(header, BorderLayout.NORTH);
JLabel footer = new JLabel("This is the way");
footer.setBorder(new EmptyBorder(4, 0, 4, 0));
footer.setHorizontalAlignment(JLabel.CENTER);
footer.setOpaque(true);
footer.setBackground(Color.BLUE);
footer.setForeground(Color.WHITE);
add(footer, BorderLayout.SOUTH);
BufferedImage leftImage = ImageIO.read(getClass().getResource("/images/Mando01.jpeg"));
BufferedImage rightImage = ImageIO.read(getClass().getResource("/images/Mando02.jpeg"));
JLabel leftLabel = new JLabel(new ImageIcon(leftImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JLabel rightLabel = new JLabel(new ImageIcon(rightImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JPanel imagePane = new JPanel(new FlowLayout(FlowLayout.CENTER, 8, 8));
imagePane.setBackground(Color.DARK_GRAY);
imagePane.add(leftLabel);
imagePane.add(rightLabel);
add(imagePane);
}
}
}
# Use a `GridBagLayout`
[![enter image description here][3]][3]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public class TestPane extends JPanel {
public TestPane() throws IOException {
setLayout(new BorderLayout());
JLabel header = new JLabel("Next");
header.setBorder(new EmptyBorder(4, 0, 4, 0));
header.setHorizontalAlignment(JLabel.CENTER);
header.setOpaque(true);
header.setBackground(Color.BLUE);
header.setForeground(Color.WHITE);
add(header, BorderLayout.NORTH);
JLabel footer = new JLabel("This is the way");
footer.setBorder(new EmptyBorder(4, 0, 4, 0));
footer.setHorizontalAlignment(JLabel.CENTER);
footer.setOpaque(true);
footer.setBackground(Color.BLUE);
footer.setForeground(Color.WHITE);
add(footer, BorderLayout.SOUTH);
BufferedImage leftImage = ImageIO.read(getClass().getResource("/images/Mando01.jpeg"));
BufferedImage rightImage = ImageIO.read(getClass().getResource("/images/Mando02.jpeg"));
JLabel leftLabel = new JLabel(new ImageIcon(leftImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JLabel rightLabel = new JLabel(new ImageIcon(rightImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JPanel imagePane = new JPanel(new GridBagLayout());
imagePane.setBackground(Color.DARK_GRAY);
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(8, 8, 8, 4);
imagePane.add(leftLabel, gbc);
gbc = new GridBagConstraints();
gbc.insets = new Insets(8, 4, 8, 8);
imagePane.add(rightLabel, gbc);
add(imagePane);
}
}
}
# Use a `GridLayout` (and `EmptyBorder`)
[![enter image description here][4]][4]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
public class TestPane extends JPanel {
public TestPane() throws IOException {
setLayout(new BorderLayout());
JLabel header = new JLabel("Next");
header.setBorder(new EmptyBorder(4, 0, 4, 0));
header.setHorizontalAlignment(JLabel.CENTER);
header.setOpaque(true);
header.setBackground(Color.BLUE);
header.setForeground(Color.WHITE);
add(header, BorderLayout.NORTH);
JLabel footer = new JLabel("This is the way");
footer.setBorder(new EmptyBorder(4, 0, 4, 0));
footer.setHorizontalAlignment(JLabel.CENTER);
footer.setOpaque(true);
footer.setBackground(Color.BLUE);
footer.setForeground(Color.WHITE);
add(footer, BorderLayout.SOUTH);
BufferedImage leftImage = ImageIO.read(getClass().getResource("/images/Mando01.jpeg"));
BufferedImage rightImage = ImageIO.read(getClass().getResource("/images/Mando02.jpeg"));
JLabel leftLabel = new JLabel(new ImageIcon(leftImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JLabel rightLabel = new JLabel(new ImageIcon(rightImage.getScaledInstance(200, -1, Image.SCALE_SMOOTH)));
JPanel imagePane = new JPanel(new GridLayout(1, 2, 8, 8));
imagePane.setBorder(new EmptyBorder(8, 8, 8, 8));
imagePane.setBackground(Color.DARK_GRAY);
imagePane.add(leftLabel);
imagePane.add(rightLabel);
add(imagePane);
}
}
}
# Or a combination of any...
Based on your needs
[1]: https://i.stack.imgur.com/QZORw.png
[2]: https://i.stack.imgur.com/Qv8Ph.png
[3]: https://i.stack.imgur.com/Rey86.png
[4]: https://i.stack.imgur.com/JEH7o.png
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论