图形面板调整大小

时间:2018-05-12 15:56:08

标签: java

这是更改为JPanel的更新代码。它显示了显示,但我似乎无法移动乌龟甚至通过制作一个类并尝试从命令移动它。

我需要做什么才能在中心展示它?

此外,添加我在上一版本中所做的所有代码

是否容易

谢谢

import java.awt.image.BufferedImage;
import javax.swing.BorderFactory;
import javax.swing.JFrame
import javax.swing.SwingUtilities;

{

        });
  }

  private static void createAndShowGUI() {
      System.out.println("Created GUI on EDT? "+          
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.add(new GraphicsPanel());
      f.pack();
      f.setVisible(true);
image.getHeight());
}

public void setballColour(Color col)
{
    Graphics g = ballDisplay.getGraphics();
    g.setColor(col);
    g.fillRect(0, 0, ballDisplay.getWidth(),  ballDisplay.getHeight()); }

    @Override
     public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, null);
            g.drawImage(ballDisplay, xPos-Object_X_SIZE/2, yPos-Object_Y_SIZE/2, null);                 

    // render the image on the panel.
    g.drawImage(image, 0, 0, null);
    g.drawImage(ballDisplay, xPos-Object_X_SIZE/2, yPos-Object_Y_SIZE/2, null); }

/**
 * Constructor.
 */
public PanelMy() {

    setBorder(BorderFactory.createLineBorder(Color.black));}

     public Dimension getPreferredSize() {
            return new Dimension(800,400);
     }
     {


    //main drawing area
    image = new Scanner(800, 400, Scanner.TYPE_INT_RGB);

2 个答案:

答案 0 :(得分:2)

  

我希望能够调整JTextField的大小

private JTextField console = new JTextField(15);

以上将使文本字段自身调整大小以容纳15个字母(不是像素),大小为" W"对于给定的字体。

  

例如,他们可以键入" forward"," turnleft"," turnright"等等。

由于最大的单词只有9个字符,你应该使用:

private JTextField console = new JTextField(9);

作为最大值。

你可能会好7或8甚至更好。

编辑:

您的代码结构存在一些问题:

console.setForeground(Color.red);
console.setBounds(80,20,250,50);
add(console);

以上代码是您设置控制台大小/位置的位置。所以基本上你忽略了#34;首选尺寸"文本字段,只使用随机大小,如(250,50)。

此外,由于代码中的设计问题,文本字段仅在该位置偶然出现。

@Override
public void paint(Graphics g) 
{

    // render the image on the panel.
    g.drawImage(image, 0, 0, null);
    g.drawImage(turtleDisplay, xPos-TURTLE_X_SIZE/2, yPos-TURTLE_Y_SIZE/2, null);
}

您不应该覆盖JFrame的paint()方法。 JFrame只是一个容器,不应包含任何应用程序逻辑。通过这样做,您将失去框架的默认功能,例如双缓冲和绘制子组件。

自定义绘画是通过覆盖JPanel的paintComponent(...)方法完成的。然后,第一个语句应为super.paintComponent(..),以确保使用默认绘制功能。然后将面板添加到框架中。

然后,您可以将文本字段添加到此面板,它将正确显示。

阅读Custom Painting上的Swing教程中的部分以获取更多信息

答案 1 :(得分:0)

试试这段代码。使用布局。 https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

//JTextField font colour//
console.setForeground(Color.red);
console.setBounds(80, 20, 250, 50);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(console)
);
layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(console)
);

add(console);
setSize(200, 100);
setVisible(true);

抱歉,我忘记阅读您的完整评论。以下代码将修复jtextfiled的大小

//JTextField font colour//
        console.setForeground(Color.red);
        console.setBounds(80, 20, 250, 50);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(console, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 323, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(console, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 280, Short.MAX_VALUE))
        );

        add(console);
        setSize(200, 100);
相关问题