日期:2014-05-20  浏览次数:20670 次

刚编写的代码有个小问题,麻烦大家帮忙看看吧.
刚编写几行代码有个问题,就是在运行的时候,后面的messagePanel面板会向下移动,以至于影响下面按钮的显示.麻烦大家看一下,帮帮我指出那个错误吧.
  以下是那个有问题的代码,可在Eclipse下运行一下.

Java code

package chapter11;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class ButtonDemo extends JFrame implements ActionListener{
    
    //Declare a panle for displaying message
    private MessagePanel messagePanel;

    //Declare two buttons to move the message left and right
    private JButton jbtLeft,jbtRight;
    
    public static void main(String[] args){
        try{
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }catch(Exception e){
            e.printStackTrace();
        }
        ButtonDemo frame=new ButtonDemo();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800,200);
        frame.setVisible(true);
        frame.setResizable(false);
    }
    
    /**
     * Default constructor
     */
    public ButtonDemo(){
        setTitle("Button Demo");
        
        //Create a MessagePanel instance and set colors
        messagePanel=new MessagePanel("Welcome to Java");
        messagePanel.setBackground(Color.yellow);
        
        JPanel jpButtons=new JPanel();
        jpButtons.setLayout(new FlowLayout());
        jpButtons.add(jbtLeft=new JButton("<="));
        jpButtons.add(jbtRight=new JButton("=>"));
        
        jbtLeft.setMnemonic('L');
        jbtRight.setMnemonic('R');
        
        //jbtLeft.setIcon(new ImageIcon("left.gif"));
        
        jbtLeft.setToolTipText("Move message to letf");
        jbtRight.setToolTipText("Move message to right");
        
        getContentPane().setLayout(new BorderLayout());
        
        getContentPane().add(jpButtons,BorderLayout.SOUTH);
        getContentPane().add(messagePanel,BorderLayout.CENTER);
        
        jbtLeft.addActionListener(this);
        jbtRight.addActionListener(this);
        
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==jbtLeft){
            left();
        }
        else if(e.getSource()==jbtRight){
            right();
        }
    }
    
    private void left(){
        int x=messagePanel.getX();
        if(x>10){
            messagePanel.setX(x-10);
            messagePanel.repaint();////////////////////////////////////////////
        }
    }
    private void right(){
        int x=messagePanel.getX();
        if(x<300){
            messagePanel.setX(x+10);
            messagePanel.repaint();
        }
    }
}



class MessagePanel extends JPanel{
    private boolean centered;
    private String message;
    private int x=20;
    private int y=20;
    
    public MessagePanel(String message){
        this.message=message;
    }
    public int getX(){
        return x;
    }
    public void setX(int x){
        this.x=x;
    }
    public int getY(){
        return y;
    }
    public void setY(int y){
        this.y=y;
    }
    /**
     * Paint the message
     */
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setFont(new Font("",Font.BOLD,20));
        g.drawString(message, x, y);
    }
    public Dimension getPreferredSize(){
        return new Dimension(200,50);
    }
    public Dimension getMinimumSize(){
        return new Dimension(200,50);
    }
}




------解决方案--------------------
这么长的代码,谁会去看呀,更别人找错了,以后提问直接问
------解决方案--------------------