使用Deitel的Java Book中的示例不起作用

时间:2013-09-08 16:38:40

标签: java swing

// Fig. 14.6: LabelFrame.java 
// Demonstrating the JLabel class. 
import java.awt.FlowLayout; // specifies how components are arranged 
import javax.swing.JFrame; // provides basic window features 
import javax.swing.JLabel; // displays text and images 
import javax.swing.SwingConstants; // common constants used with Swing
import javax.swing.Icon; // interface used to manipulate images 
import javax.swing.ImageIcon; // loads images 

public class LabelFrame extends JFrame 
{ 
private JLabel label1; // JLabel with just text 

private JLabel label2; // JLabel constructed with text and icon 

private JLabel label3; // JLabel with added text and icon 

// LabelFrame constructor adds JLabels to JFrame 
public LabelFrame(){ 

{super( "Testing JLabel" ); 

setLayout( new FlowLayout() ); 

// JLabel constructor with a string argument 

label1 = new JLabel( "Label with text" ); 

label1.setToolTipText( "This is label1" ); 

add( label1 ); 

//JLabel constructor with string, Icon and alignment arguments 

Icon bug = new ImageIcon( getClass().getResource( "bug1.png" ) ); 

label2 = new JLabel( "Label with text and icon", bug, 

SwingConstants.LEFT ); 

label2.setToolTipText( "This is label2" ); 

add( label2 ); 

label3 = new JLabel(); // JLabel constructor no arguments 

label3.setText( "Label with icon and text at bottom" ); 

label3.setIcon( bug ); // add icon to JLabel 

label3.setHorizontalTextPosition( SwingConstants.CENTER ); 

label3.setVerticalTextPosition( SwingConstants.BOTTOM ); 

label3.setToolTipText( "This is label3" ); 

add( label3 ); 
} 
} 

那是第一类。

import javax.swing.JFrame; 

public class LabelTest 
{ 
public static void main( String[] args ) 
{ 
LabelFrame labelFrame = new LabelFrame(); // create LabelFrame 
labelFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
labelFrame.setSize( 260, 180 ); // set frame size 
labelFrame.setVisible( true ); // display frame 
} // end main 
} 

这是第二阶段。

我注意到一个无类型(LabelFrame)类没有类型,但是我从Deitel的Java书中复制了。我认为我们是正确的,但到目前为止,由于这一小段代码,它没有运行。我想知道它是否可能是Java版本的一个问题,因为我的是最新的,本书是从2012年开始。如果你可以告诉我为什么这个代码不能在Eclipse中运行,那将非常感激。另外,添加不起作用。感谢。

4 个答案:

答案 0 :(得分:2)

好吧..似乎问题是代码甚至不能干净地编译。这主要是由于缺乏逻辑缩进导致括号错误放置。

此代码编译,但由于缺少图像而在运行时失败(此处)。

import java.awt.FlowLayout; // specifies how components are arranged
import javax.swing.JFrame; // provides basic window features
import javax.swing.JLabel; // displays text and images
import javax.swing.SwingConstants; // common constants used with Swing
import javax.swing.Icon; // interface used to manipulate images
import javax.swing.ImageIcon; // loads images

public class LabelFrame extends JFrame
{
    private JLabel label1; // JLabel with just text
    private JLabel label2; // JLabel constructed with text and icon
    private JLabel label3; // JLabel with added text and icon

    // LabelFrame constructor adds JLabels to JFrame
    public LabelFrame() {
        super( "Testing JLabel" );
        setLayout( new FlowLayout() );
        // JLabel constructor with a string argument
        label1 = new JLabel( "Label with text" );
        label1.setToolTipText( "This is label1" );
        add( label1 );

        //JLabel constructor with string, Icon and alignment arguments
        Icon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );

        label2 = new JLabel( "Label with text and icon", bug,
        SwingConstants.LEFT );
        label2.setToolTipText( "This is label2" );
        add( label2 );
        label3 = new JLabel(); // JLabel constructor no arguments
        label3.setText( "Label with icon and text at bottom" );
        label3.setIcon( bug ); // add icon to JLabel
        label3.setHorizontalTextPosition( SwingConstants.CENTER );
        label3.setVerticalTextPosition( SwingConstants.BOTTOM );
        label3.setToolTipText( "This is label3" );
        add( label3 );
    }

    public static void main( String[] args )
    {
        LabelFrame labelFrame = new LabelFrame(); // create LabelFrame
        labelFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        labelFrame.setSize( 260, 180 ); // set frame size
        labelFrame.setVisible( true ); // display frame
    } // end main
}

答案 1 :(得分:0)

添加显示错误的原因是因为您没有“在LabelFrame类中扩展JFrame, 它应该像这样编码:

public class LabelFrame extends JFrame{
}

应该解决这个问题,在你的问题的其余部分,我有同样的问题,因为图像不存在,它是空的,如果有人可以告诉我如何获取图像并使用它,那将是非常感谢,谢谢!..

答案 2 :(得分:0)

将图片复制并粘贴到项目包中并运行代码。我希望它能正常工作。 另一个过程: 使用 ImageIcon bug = new ImageIcon("java.png"); //在双引号中写下图像的完整路径。 而不是Icon bug = new ImageIcon( getClass().getResource( "bug1.png" ) ); 我希望它也能奏效。

答案 3 :(得分:0)

我遇到了同样的问题。这是解决方案......只需制作一个png图像(使用photoshop)并将其命名为bug1.png。现在只需复制&将图像粘贴到项目的src文件夹中。多数民众赞成。