我需要在图像的中心写文字.要写的文字并不总是一样的.
我正在使用的代码在这里:
// Here I first draw the image
g.drawImage(img, 22, 15, 280, 225, null);
// I get the text
String text = photoText.getText();
// Set the text color to black
g.setColor(Color.black);
// I draw the string
g.drawString(text, 79.5F, 220.0F);
Run Code Online (Sandbox Code Playgroud)
问题是文本不在图像的中心,我该怎么办?
我只需要在水平中心绘制文字.
我正在尝试将图像添加到一个帧但看起来它不起作用.ImageIcon从指定文件创建的图像.图像文件位于java文件存在的seam目录中.
import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class image {
public static void main(String args[])
{
TimeFrame frame = new TimeFrame();
}
}
class TimeFrame extends JFrame
{
//Image icon = Toolkit.getDefaultToolkit().getImage("me.jpg");
ImageIcon icon = new ImageIcon("me.jpg");
JLabel label = new JLabel(icon);
public TimeFrame(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("My Frame");
setSize(500,400);
//this.setIconImage(icon);
add(label,BorderLayout.CENTER);
setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud) 我不是很擅长创建Swing应用程序.所以我有问题如何设置图标JButton.
我的项目结构如下所示:

我JButton在MainWindow课堂上很简单:它看起来像这样:
tactButton = new JButton("next tact");
Run Code Online (Sandbox Code Playgroud)
我想使用方法将图像设置为此按钮setIcon.我的代码看起来像这样:
tactButton.setIcon(new ImageIcon(getClass().getResource("/images/button_next.jpg")));
Run Code Online (Sandbox Code Playgroud)
但是当我启动应用程序时,我有例外:
java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at by.bulgak.conveyor.gui.MainWindow.<init>(MainWindow.java:117)
at by.bulgak.conveyor.gui.MainWindow$1.run(MainWindow.java:46)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
Run Code Online (Sandbox Code Playgroud)
所以我尝试了不同的东西:
MainWindow的类tactButton.setIcon(new ImageIcon("/images/button_next.jpg")); 但我有这个例外,或者如果我使用tactButton.setIcon(new ImageIcon("/images/button_next.jpg"));我有简单的按钮没有图像.
最后,我写了我的图像的绝对路径,这很好(但绝对路径不是好主意).你能帮帮我吗?
我看了一个问题如何将图像添加到JButton并试图像那样做.
UPDATE
创建按钮和设置图标的完整代码:
tactButton = new JButton("next tact");
tactButton.setSize(100, …Run Code Online (Sandbox Code Playgroud) 我希望按值传递ImageIcon实例,因为我们知道默认情况下它是按值传递引用.有没有办法解决这个问题?
ImageIcon img1 = new ImageIcon();
ImageIcon img2 = new ImageIcon();
img1 = img2; // both share the same reference.......
Run Code Online (Sandbox Code Playgroud)
我尝试使用ImageIcon getImage()和setImage().
但实际上我的程序包括将图像写入文件,图像的质量似乎发生了变化.
简而言之,有一种使用函数的方法
img1 = func(img2); // both do not share the same refernce. But the value is copied
Run Code Online (Sandbox Code Playgroud)
至少我怎么能留住上使用完全相同的图像质量getImage()还是setImage()?
根据要求提供一些其他信息.
我正在使用的是jpg图像,我将函数完全包含在image = img1.getimage();
img2.setImage(图像);
我维护了一个单独的java类,它保存了包含jpg图像的默认ImageIcon,我正在使用一些类方法从中检索图像
ImageIcon defaulticon = new ImageIcon("d:\\default.jpg");
public void getdefaultimage(ImageIcon img)
{
img.setImage(defaulticon.getImage());
}
// The class which I maintained specifically for this purpose is a pure java …Run Code Online (Sandbox Code Playgroud) 我正在使用JLabel在JFrame中显示图像并设置它的图标.
它第一次工作,但每当我去更改图像时,它仍然是我第一次设置它,所以我尝试了这个并且仍然是相同的结果.
contentPane.remove(lblPlaceholder);
lblPlaceholder = null;
lblPlaceholder = new JLabel("");
lblPlaceholder.setBounds(10, 322, 125, 32);
contentPane.add(lblPlaceholder);
lblPlaceholder.setIcon(new ImageIcon("tempimage.png"));
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它改变它的形象?我也试过没有结果重新绘制JFrame.
尝试显示我的徽标时遇到问题。图片保存在与main.java同一个文件夹中
ImageIcon im = new ImageIcon("banner.png");
JLabel bam = new JLabel(im);
grid.add(bam);
Run Code Online (Sandbox Code Playgroud)
我的语法有问题吗?
我使用a JLabel来查看图像JFrame.我从一个文件加载它ImageIcon.
JFrame frame = new JFrame(String);
frame.setLocationByPlatform(true);
frame.setSize(500, 500);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel cpu = new JLabel(new ImageIcon(String));
cpu.setLocation(20, 20);
cpu.setSize(20, 460);
frame.add(cpu);
frame.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

我无法设置位置和大小,JLabel因为它是自动完成的.

我必须手动设置这些值,因为我想截断图像(垂直进度条).
我创建了一个 jTable,用于显示国家/地区名称以及名称旁边的单元格中的国旗图标。如何使用 ImageIcon 类在同一列但不同行中显示每个图标,而不只显示字符串?
以下是我编写的内容,用于在 jTable 中的某个位置显示法国国旗图标,但它只显示字符串
ImageIcon icon = new ImageIcon("http://www.stoma.fr/assets/images/French_Flag_Small_Icon.jpg");
jTable.setValueAt(icon, 1, 2);
Run Code Online (Sandbox Code Playgroud) 我正在制作一个依赖于网格中的瓷砖的java游戏.我在GridLayout中使用了ImageIcon和JLabel.我在创建GridLayout时将垂直和水平都设置为零,并且所有使用的图像都没有额外的空间.
解决这个问题的最佳方法是什么?
//Sets up the game canvas
private void setUpCanvasPanel(){
//Adjusts the panel settings
canvasPanel.setLayout(new GridLayout(Main.diameter, Main.diameter, 0 ,0));
//Adds panel to masterpanel
resetc();
c.gridx = 0;
c.gridy = 1;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
masterPanel.add(canvasPanel, c);
}
//Renders the game canvas
public void renderCanvas(){
ImageIcon[] iconArray = new ImageIcon[Main.diameter * Main.diameter];
JLabel[] labelArray = new JLabel[Main.diameter * Main.diameter];
int count = 0;
for(int i = 0; i < Main.diameter; i ++){
for(int j = 0; …Run Code Online (Sandbox Code Playgroud) 长话短说
有没有办法消除 MenuItem 边框和定义文本之间的图标间隙?即使我没有设置图标,或者将图标设置为空,它也会在我创建菜单项时立即出现。
长版
我们公司开发的 Java 应用程序自 20 世纪 90 年代就存在。在 2000 年代,它被重新设计,并且曾经有那些可怕的、呃我的意思是花哨和丰富多彩的“Synthetica”主题之一。所以现在是时候变得更加严肃和有信誉了,拥有一个更加优雅和现代的 L&F。这就是为什么我从 切换SyntheticaLookAndFeel到内置SystemLookAndFeel.
好吧,这并不像我之前想象的那么容易,但无论如何......我走在正确的道路上;)
我唯一努力去上班的事情就是那些MenuItems。通常在 Java 中,如果您创建一个简单的 Menu 或 PopMenu 并添加一个 JMenuItem,它应该看起来像一个只有文本的普通菜单。在我们的应用程序中,我可以做任何我想做的事情,它总是在每个菜单项的左侧显示一个空格。
我在整个工作区中搜索了任何(错误的)预设配置。我检查了 UIManager 并尝试了将菜单项图标设置为空的不同方法,但我没有发现任何有用的东西。我什至创建了一个新类EmptyIcon,它设置了一个宽度为 1px 的图标,并将其设置为 UIManager 中的预设。
// The empty icon class
public class EmptyIcon implements Icon {
private int width = 1, height = 0;
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {}
@Override
public int getIconWidth() {
return width;
}
@Override …Run Code Online (Sandbox Code Playgroud)