这是更改为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);
答案 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);