如何将图片制作成 JButton 的全尺寸?
How do I make a picture the full size of a JButton?
我正在向我的 JButton
添加一个 ImageIcon
,但图像的大小已关闭。我希望图像不仅占据 JButton
部分的全部大小,我该如何实现?我附上了正在发生的事情的图片。
start = new JButton("Start Menu");
start.setForeground(Color.WHITE);
ImageIcon ii = new ImageIcon("C:\Users\Bobby\Desktop\Ocean.jpg");
int scale = 1;
int width = ii.getIconWidth();
int newWidth = width / scale;
start.setIcon(new ImageIcon(ii.getImage().getScaledInstance(newWidth, -1,
java.awt.Image.SCALE_SMOOTH)));
默认情况下,您的图片仅限于 JButton
的一部分,因为它既有文字又有要显示的图标
通过将文本叠加在图像之上,图标会变大以填充更多按钮。这可以通过设置文本放置的垂直和水平首选项来完成:
start.setHorizontalTextPosition(JButton.CENTER);
start.setVerticalTextPosition(JButton.CENTER);
此时您的图像将覆盖 JButton
的大部分,但 JButton
的可能不需要的部分在边框周围仍然可见。这是由于边距限制了图标的进一步增长
通过 start.setMargin(new Insets(0,0,0,0));
将边距设置为 0
该按钮应与此类似:
我总是在我的应用程序中保留自己的图像class,这可能是我最常用的方法。
public static ImageIcon resizeImageIcon(ImageIcon ii, int width, int height){
ImageIcon imageIcon = new ImageIcon(ii.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
return imageIcon;
}
这将重新调整任何现有 ImageIcon 的大小。
我也建议你使用可以点击的JLabel。这主要是为了避免奇怪的按钮边框。如果您喜欢这个,我也提供了我自己的 class 来处理这个问题。
import java.awt.Cursor;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class FClickLabel extends JLabel {
public FClickLabel(ImageIcon on, ImageIcon off, ImageIcon press){
this.setIcon(off);
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
setIcon(on);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
setIcon(press);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mouseClicked(java.awt.event.MouseEvent evt) {
clickAction();
}
});
}
public FClickLabel(String text, ImageIcon on, ImageIcon off, ImageIcon press){
this.setIcon(off);
this.setText(text);
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
setIcon(on);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
setIcon(press);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mouseClicked(java.awt.event.MouseEvent evt) {
clickAction();
}
});
}
public void clickAction() {
}
}
如果您只想要一张图片,您可以简单地提供它 3 次或删除更改它的代码并编辑构造函数。在构建 FClickLabel 时,您可以覆盖 clickAction() ,就像我用于我的应用程序退出按钮的这个例子:
FClickLabel exButton = new FClickLabel(Images.resizeImageIcon(Images.exitOn, 24, 24)
,Images.resizeImageIcon(Images.exitOff, 24, 24)
,Images.resizeImageIcon(Images.exitPress, 24, 24)){
@Override
public void clickAction(){
System.exit(0);
}
};
我正在向我的 JButton
添加一个 ImageIcon
,但图像的大小已关闭。我希望图像不仅占据 JButton
部分的全部大小,我该如何实现?我附上了正在发生的事情的图片。
start = new JButton("Start Menu");
start.setForeground(Color.WHITE);
ImageIcon ii = new ImageIcon("C:\Users\Bobby\Desktop\Ocean.jpg");
int scale = 1;
int width = ii.getIconWidth();
int newWidth = width / scale;
start.setIcon(new ImageIcon(ii.getImage().getScaledInstance(newWidth, -1,
java.awt.Image.SCALE_SMOOTH)));
默认情况下,您的图片仅限于 JButton
的一部分,因为它既有文字又有要显示的图标
通过将文本叠加在图像之上,图标会变大以填充更多按钮。这可以通过设置文本放置的垂直和水平首选项来完成:
start.setHorizontalTextPosition(JButton.CENTER);
start.setVerticalTextPosition(JButton.CENTER);
此时您的图像将覆盖 JButton
的大部分,但 JButton
的可能不需要的部分在边框周围仍然可见。这是由于边距限制了图标的进一步增长
通过 start.setMargin(new Insets(0,0,0,0));
该按钮应与此类似:
我总是在我的应用程序中保留自己的图像class,这可能是我最常用的方法。
public static ImageIcon resizeImageIcon(ImageIcon ii, int width, int height){
ImageIcon imageIcon = new ImageIcon(ii.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT));
return imageIcon;
}
这将重新调整任何现有 ImageIcon 的大小。
我也建议你使用可以点击的JLabel。这主要是为了避免奇怪的按钮边框。如果您喜欢这个,我也提供了我自己的 class 来处理这个问题。
import java.awt.Cursor;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class FClickLabel extends JLabel {
public FClickLabel(ImageIcon on, ImageIcon off, ImageIcon press){
this.setIcon(off);
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
setIcon(on);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
setIcon(press);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mouseClicked(java.awt.event.MouseEvent evt) {
clickAction();
}
});
}
public FClickLabel(String text, ImageIcon on, ImageIcon off, ImageIcon press){
this.setIcon(off);
this.setText(text);
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
setIcon(on);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
setIcon(press);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
setIcon(off);
}
public void mouseClicked(java.awt.event.MouseEvent evt) {
clickAction();
}
});
}
public void clickAction() {
}
}
如果您只想要一张图片,您可以简单地提供它 3 次或删除更改它的代码并编辑构造函数。在构建 FClickLabel 时,您可以覆盖 clickAction() ,就像我用于我的应用程序退出按钮的这个例子:
FClickLabel exButton = new FClickLabel(Images.resizeImageIcon(Images.exitOn, 24, 24)
,Images.resizeImageIcon(Images.exitOff, 24, 24)
,Images.resizeImageIcon(Images.exitPress, 24, 24)){
@Override
public void clickAction(){
System.exit(0);
}
};