Java 要使用哪个Swing组件?
我是Java和GUI编程的新手。我有以下问题 在我的GUI中,我有一个JTextField和一个JLabel,它读取“Radius”。现在我想在JTextField旁边放置一个带有问号的图标,单击该图标可以详细解释JLabel的含义。例如,在这种情况下,它应该弹出一条消息,解释“要在图像上绘制的圆的半径”。当鼠标移动时,信息应该消失。下面是我试图实现的图形描述 我的问题很基本。我想知道我可以使用哪个Swing组件来实现这一点?我试图在网上查找它,但我不知道要查找哪个组件。如有任何帮助和建议,将不胜感激。Java 要使用哪个Swing组件?,java,swing,jlabel,jtextfield,Java,Swing,Jlabel,Jtextfield,我是Java和GUI编程的新手。我有以下问题 在我的GUI中,我有一个JTextField和一个JLabel,它读取“Radius”。现在我想在JTextField旁边放置一个带有问号的图标,单击该图标可以详细解释JLabel的含义。例如,在这种情况下,它应该弹出一条消息,解释“要在图像上绘制的圆的半径”。当鼠标移动时,信息应该消失。下面是我试图实现的图形描述 我的问题很基本。我想知道我可以使用哪个Swing组件来实现这一点?我试图在网上查找它,但我不知道要查找哪个组件。如有任何帮助和建议,将不
你可以很容易地做到。您只需使用JLabel并在其上不放置任何文本即可。而是在上面放一个图像 此代码允许您将图像设置为JLabel
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class AddingIconJLabel {
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setTitle("JLabel Test");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon imageIcon = new ImageIcon("yourFile.gif");
JLabel label = new JLabel(imageIcon);
frame.add(label);
frame.pack();
frame.setVisible(true);
}
}
其次,在JLabel上放置工具提示,以便在图像上显示文本
这里有一些有用的代码提示
JLabel label = new JLabel("Username");
label.setToolTipText("Enter your username");
你可以很容易地做到。您只需使用JLabel并在其上不放置任何文本即可。而是在上面放一个图像 此代码允许您将图像设置为JLabel
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class AddingIconJLabel {
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
frame.setTitle("JLabel Test");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon imageIcon = new ImageIcon("yourFile.gif");
JLabel label = new JLabel(imageIcon);
frame.add(label);
frame.pack();
frame.setVisible(true);
}
}
其次,在JLabel上放置工具提示,以便在图像上显示文本
这里有一些有用的代码提示
JLabel label = new JLabel("Username");
label.setToolTipText("Enter your username");
我想知道为什么没有人建议用a来做这个 这基本上就是工具提示(和弹出菜单)“引擎盖下”使用的内容。这里的主要优点是,您不必关心布局,并且(与标准工具提示不同)可以完全控制布局的显示时间和消失时间。因此,您可以在单击图标时显式创建弹出窗口,并在鼠标退出图标时显式隐藏它: 以下是代码,如下所示:
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.Point;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入javax.swing.BorderFactory;
导入javax.swing.Icon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.Popup;
导入javax.swing.PopupFactory;
导入javax.swing.SwingUtilities;
导入javax.swing.UIManager;
公共类弹出窗口示例
{
公共静态void main(字符串[]args)
{
调用器(()->createAndShowGui());
}
私有静态void createAndShowGui()
{
JFrame f=新的JFrame();
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p=newjpanel(newborderlayout());
p、 添加(新JLabel(“半径”)、BorderLayout.WEST;
p、 添加(新JTextField(10),BorderLayout.CENTER);
Icon-Icon=UIManager.getIcon(“OptionPane.questionIcon”);
JLabel标签=新的JLabel(图标);
addHelpPopup(标签“”)
+“帮助文本。您可以(但不必)
”
+“不必)在此处为
使用HTML”
+“格式化”
+ "");
p、 添加(标签,边框布局。东);
f、 getContentPane().setLayout(新的FlowLayout());
f、 getContentPane().add(p);
f、 添加(标签);
f、 设置大小(400300);
f、 setLocationRelativeTo(空);
f、 setVisible(真);
}
私有静态void addHelpPopup(组件、字符串文本)
{
addMouseListener(新的MouseAdapter()
{
私人弹出窗口;
@凌驾
公共无效mouseClicked(MouseEvent e)
{
如果(弹出!=null)
{
popup.hide();
弹出=空;
}
PopupFactory-PopupFactory=PopupFactory.getSharedInstance();
JLabel标签=新的JLabel(文本);
label.set不透明(true);
label.setboorder(BorderFactory.createCompoundBorder(
BorderFactory.createLineBorder(颜色为黑色),
createEmptyByOrder(5,5,5,5));
维度尺寸=label.getPreferredSize();
点p=e.getLocationOnScreen();
popup=popupFactory.getPopup(
部件、标签、p.x、p.y-尺寸高度);
popup.show();
}
@凌驾
公共无效mouseExited(MouseEvent e)
{
如果(弹出!=null)
{
popup.hide();
弹出=空;
}
}
});
}
}
我想知道为什么没有人建议用a来做这个
这基本上就是工具提示(和弹出菜单)“引擎盖下”使用的内容。这里的主要优点是,您不必关心布局,并且(与标准工具提示不同)可以完全控制布局的显示时间和消失时间。因此,您可以在单击图标时显式创建弹出窗口,并在鼠标退出图标时显式隐藏它:
以下是代码,如下所示:
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.Point;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入javax.swing.BorderFactory;
导入javax.swing.Icon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.Popup;
导入javax.swing.PopupFactory;
导入javax.swing.SwingUtilities;
导入javax.swing.UIManager;
公共类弹出窗口示例
{
公共静态void main(字符串[]args)
{
调用器(()->createAndShowGui());
}
私有静态void createA