设置按钮

时间:2015-11-28 16:56:29

标签: java

此代码的输出有两个并排放置的按钮。我想改变按钮位置,如位置是顶部和底部。如何设置按钮的位置。我需要修改此代码的哪一部分?

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
 * Custom Graphics Example: Using key/button to move a line left or right.
*/
@SuppressWarnings("serial")
public class CGMoveALine extends JFrame {
    // Name-constants for the various dimensions
    public static final int CANVAS_WIDTH = 400;
    public static final int CANVAS_HEIGHT = 140;
    public static final Color LINE_COLOR = Color.BLACK;
    public static final Color CANVAS_BACKGROUND = Color.CYAN;

    // The line from (x1, y1) to (x2, y2), initially position at the center
    private int x1 = CANVAS_WIDTH / 2;
    private int y1 = CANVAS_HEIGHT / 8;
    private int x2 = x1;
    private int y2 = CANVAS_HEIGHT / 8 * 7;

    private DrawCanvas canvas; // the custom drawing canvas (extends JPanel)

    **strong text**/** Constructor to set up the GUI */
    public CGMoveALine() {
  // Set up a panel for the buttons
  JPanel btnPanel = new JPanel(new FlowLayout());
  JButton btnLeft = new JButton("Move Left ");
  btnPanel.add(btnLeft);
  btnLeft.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
        x1 -= 10;
        x2 -= 10;
        canvas.repaint();
        requestFocus(); // change the focus to JFrame to receive KeyEvent
     }
  });
  JButton btnRight = new JButton("Move Right");
  btnPanel.add(btnRight);
  btnRight.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
        x1 += 10;
        x2 += 10;
        canvas.repaint();
        requestFocus(); // change the focus to JFrame to receive KeyEvent
     }
  });

  // Set up a custom drawing JPanel
  canvas = new DrawCanvas();
  canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));

  // Add both panels to this JFrame
  Container cp = getContentPane();
  cp.setLayout(new BorderLayout());
  cp.add(canvas, BorderLayout.CENTER);
  cp.add(btnPanel, BorderLayout.SOUTH);

  // "this" JFrame fires KeyEvent
  addKeyListener(new KeyAdapter() {
     @Override
     public void keyPressed(KeyEvent evt) {
        switch(evt.getKeyCode()) {
           case KeyEvent.VK_LEFT:
              x1 -= 10;
              x2 -= 10;
              repaint();
              break;
           case KeyEvent.VK_RIGHT:
              x1 += 10;
              x2 += 10;
              repaint();
              break;
        }
     }
  });

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Handle the CLOSE button
  setTitle("Move a Line");
  pack();           // pack all the components in the JFrame
  setVisible(true); // show it
  requestFocus();   // set the focus to JFrame to receive KeyEvent
   }

   /**
* DrawCanvas (inner class) is a JPanel used for custom drawing
*/
   class DrawCanvas extends JPanel {
       @Override
        public void paintComponent(Graphics g) {
        super.paintComponent(g);
        setBackground(CANVAS_BACKGROUND);
        g.setColor(LINE_COLOR);
        g.drawLine(x1, y1, x2, y2); // draw the line
        }
   }

   /** The entry main() method */
   public static void main(String[] args) {
      // Run GUI codes on the Event-Dispatcher Thread for thread safety
      SwingUtilities.invokeLater(new Runnable() {
         @Override
         public void run() {
             new CGMoveALine(); // Let the constructor do the job
         }
      });
    }
 }

我想制作像position

这样的按钮

1 个答案:

答案 0 :(得分:0)

在本节中:

    **strong text**/** Constructor to set up the GUI */
    public CGMoveALine() {
  // Set up a panel for the buttons
  JPanel btnPanel = new JPanel(new FlowLayout());

按以下方式更改:

  public CGMoveALine() {
  // Set up a panel for the buttons
  JPanel btnPanel = new JPanel(new GridLayout(2,1));

输出:

enter image description here

或者如果你想在顶部和底部有一个按钮,你可以这样做:

    public CGMoveALine() {
  // Remove button panels
  JButton btnLeft = new JButton("Move Left ");
  btnLeft.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
        x1 -= 10;
        x2 -= 10;
        canvas.repaint();
        requestFocus(); // change the focus to JFrame to receive KeyEvent
     }
  });
  JButton btnRight = new JButton("Move Right");
  btnRight.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
        x1 += 10;
        x2 += 10;
        canvas.repaint();
        requestFocus(); // change the focus to JFrame to receive KeyEvent
     }
  });

  // Set up a custom drawing JPanel
  canvas = new DrawCanvas();
  canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));

  // Add both panels to this JFrame
  Container cp = getContentPane();
  cp.setLayout(new BorderLayout());
  // Manually add a button to top and one to bottom (ie, NORTH and SOUTH)
  cp.add(btnRight, BorderLayout.NORTH);
  cp.add(canvas, BorderLayout.CENTER);
  cp.add(btnLeft, BorderLayout.SOUTH);

输出:

enter image description here

旁注,你为什么这样做:**strong text**/** Constructor to set up the GUI */?此行不正确,将导致编译问题。

使用通常的评论技巧://Constructor to set up the GUI而不是这个?