在我的程序中,我试图在框架内创建一个工具栏。在工具栏中,我有三个用图片而不是文本表示的按钮。
问题是我发现如果我在构造函数中创建 JButton 对象,与在构造函数之外(但仍在 JFrame 类中)执行此操作相比,按钮的显示方式有所不同。
我在构造函数中创建按钮时的代码:
public class Tool extends JFrame
{
public Tool()
{
JToolbar bar = new JToolBar();
JButton button1 = new JButton(img1);
JButton button2 = new JButton(img2);
JButton button3 = new JButton(img3);
bar.add(button1);
bar.add(button2);
bar.add(button3);
}
}
然后按钮被漂亮而整齐地添加到工具栏上。
但是,如果我这样做:
public class Tool extends JFrame
{
JButton button1 = new JButton(img1);
JButton button2 = new JButton(img2);
JButton button3 = new JButton(img3);
public Tool()
{
JToolbar bar = new JToolBar();
bar.add(button1);
bar.add(button2);
bar.add(button3);
}
}
然后,这些按钮仍然添加到工具栏中。但是,它们似乎没有被很好地格式化,而是在它们周围有一个边框(例如,如果你刚刚从谷歌复制了一张图像并将其粘贴到一个 powerpoint 演示文稿中,并且你在图像周围得到了一个方形边框)。
为什么会这样?为什么在哪里创建 JButton 对象很重要?
先感谢您。
编辑(完整的正确代码):在下面的代码中,button1 和 button2 在构造函数中创建,而 button3 在构造函数之外创建。如您所见,与其他两个按钮相比,按钮周围有一个带有文本“Java”的淡白色边框。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Tool extends JFrame
{
JButton button3 = new JButton("Java");
public Tool()
{
super("Tool");
setLookAndFeel();
setSize(370, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button1 = new JButton("Help");
JButton button2 = new JButton("SOS");
//build toolbar
JToolBar bar = new JToolBar();
bar.add(button1);
bar.add(button2);
bar.add(button3);
// build text area
JTextArea edit = new JTextArea(8, 40);
JScrollPane scroll = new JScrollPane(edit);
// create frame
BorderLayout border = new BorderLayout();
setLayout(border);
add("North", bar);
add("Center", scroll);
setVisible(true);
}
private void setLookAndFeel()
{
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}
catch(Exception e)
{
}
}
public static void main(String[] arguments)
{
Tool loot = new Tool();
}
}