英文:
JButton with both icon (on top) and text (on bottom) aligned to the left
问题
以下是您要的翻译部分:
我想要一个JButton,其中图标(位于顶部)和文本(位于底部)都对齐到左侧。用户可以调整按钮的大小,两者都应始终保持左对齐,就像这样:
(图片)
我尝试了以下代码:
// 文本对齐
comp.setHorizontalAlignment(SwingConstants.LEFT);
// 文本位置
comp.setVerticalTextPosition(SwingConstants.BOTTOM);
// 设置图标对齐?!
comp.setHorizontalTextPosition(SwingConstants.CENTER);
但是我的结果是(图标始终相对于文本居中!):
(图片)
有什么建议吗?
英文:
I would like to have a JButton with both icon (on top) and text (on bottom) aligned to the left. The Button can be resized by the user and both should always remain aligned to the left, like this:
I have tried this
// Text alignment
comp.setHorizontalAlignment(SwingConstants.LEFT);
// text position
comp.setVerticalTextPosition(SwingConstants.BOTTOM);
//set icon alignment?!
comp.setHorizontalTextPosition(SwingConstants.CENTER);
but this is my result (The icon always remains centred in relation to the text!):
Any ideas?
答案1
得分: 3
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public final class ButtonTextAlignmentTest {
private Component makeUI() {
Icon icon = UIManager.getIcon("FileView.directoryIcon");
String text = "The text aligned to the left";
String html = String.format("<html><img src='%s'/><br/>Html: %s", makeIconUrl(icon), text);
JButton button1 = new JButton(html);
JLabel iconLabel = new JLabel(null, icon, SwingConstants.LEADING);
JLabel textLabel = new JLabel("Layout: " + text);
JButton button2 = new JButton();
button2.setLayout(new GridLayout(0, 1));
button2.add(iconLabel);
button2.add(textLabel);
JPanel p = new JPanel();
p.add(button1);
p.add(button2);
return p;
}
private static String makeIconUrl(Icon icon) { // Create a dummy URL for testing
try {
File file = File.createTempFile("dummy", ".png");
file.deleteOnExit();
BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bi.createGraphics();
icon.paintIcon(null, g2, 0, 0);
g2.dispose();
ImageIO.write(bi, "png", file);
return file.toURI().toURL().toString();
} catch (IOException ex) {
return "";
}
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(new ButtonTextAlignmentTest().makeUI());
frame.setSize(320, 240);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
英文:
- You can use the
<br>
tag to split theJButton
text onto multiple lines along with the<html>
tags. - Another common way is to place multiple
JLabel
s on aJButton
by setting theLayoutManager
.
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public final class ButtonTextAlignmentTest {
private Component makeUI() {
Icon icon = UIManager.getIcon("FileView.directoryIcon");
String text = "The text aligned to the left";
String html = String.format("<html><img src='%s'/><br/>Html: %s", makeIconUrl(icon), text);
JButton button1 = new JButton(html);
JLabel iconLabel = new JLabel(null, icon, SwingConstants.LEADING);
JLabel textLabel = new JLabel("Layout: " + text);
JButton button2 = new JButton();
button2.setLayout(new GridLayout(0, 1));
button2.add(iconLabel);
button2.add(textLabel);
JPanel p = new JPanel();
p.add(button1);
p.add(button2);
return p;
}
private static String makeIconUrl(Icon icon) { // Create a dummy URL for testing
try {
File file = File.createTempFile("dummy", ".png");
file.deleteOnExit();
BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bi.createGraphics();
icon.paintIcon(null, g2, 0, 0);
g2.dispose();
ImageIO.write(bi, "png", file);
return file.toURI().toURL().toString();
} catch (IOException ex) {
return "";
}
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(new ButtonTextAlignmentTest().makeUI());
frame.setSize(320, 240);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论