出于某种原因,即使我已在我的代码中实现了validate方法,并将我的JPanel添加到了我的JFrame中。我也试图让我的JLabel拥有Comic Sans字体,并让它在屏幕中居中。为什么我的JLabel没有出现在我的JPane上
package math_program;
import java.awt.Color;
import java.awt.Font;
import java.util.Random;
import javax.swing.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
public class Canvas
{
Images obj = new Images();
public void paintFrame()
{
//Instantiation of objects
Random gen = new Random();
JFrame frame = new JFrame();
JPanel panel = new JPanel();
//Text
JLabel problem = new JLabel();
frame.setVisible(true);
frame.setAlwaysOnTop(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE); //Make frame actually closeable
frame.setTitle("Math Owl: Alpha V:0.1 (coded by John)");
frame.setSize(800, 500);
frame.setLocationRelativeTo(null);
frame.add(panel); //Add JPanel to JFrame
panel.setVisible(true);
panel.setLayout(null);
panel.setBackground(Color.WHITE); //To see if text is even appearing
//Adding Components
problem.setFont(new Font("Comic Sans MS", Font.PLAIN, 20));
problem.setLocation(400,250);
problem.setText(gen.nextInt(11) + " + " + gen.nextInt(11));
panel.add(problem);
panel.validate();
}
}
答案 0 :(得分:0)
使用合适的布局管理器就像copeg所说的那样。即使是默认的布局管理器(Flow Layout)也可以使用。只需删除panel.setLayout(null);
,您的JLabel即会显示。
另外,当我尝试你的代码段代码时Images obj = new Images();
也有问题我假设你已经在你的包中定义了Images类。
`
答案 1 :(得分:0)
public void switchCamera(){
Log.i(TAG, "Switching Camera");
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
//mCamera = null;
}
//swap the id of the camera to be used
if (camId == Camera.CameraInfo.CAMERA_FACING_BACK) {
camId = Camera.CameraInfo.CAMERA_FACING_FRONT;
}else {
camId = Camera.CameraInfo.CAMERA_FACING_BACK;
}
try {
mCamera = Camera.open(camId);
//mCamera.setDisplayOrientation(90);
//You must get the holder of SurfaceView!!!
mCamera.setPreviewDisplay(mView.getHolder());
//Then resume preview...
mCamera.startPreview();
}
catch (Exception e) { e.printStackTrace(); }
}
答案 2 :(得分:0)
问题是,使用null
布局时,您必须同时设置每个组件的位置和大小。您只设置标签的位置,因此您可以使用problem.setSize(x, y);
进行修复。话虽如此,采取这种方法是错误的。查看此框架的整个GUI设计是什么样的,然后选择appropriate LayoutManager
。
试试这个:
public class MyCanvas {
public MyCanvas() {
Random gen = new Random();
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JLabel problem = new JLabel();
panel.setBackground(Color.WHITE);
problem.setFont(new Font("Comic Sans MS", Font.PLAIN, 20));
problem.setText(gen.nextInt(11) + " + " + gen.nextInt(11));
panel.add(problem); // Default FlowLayout
frame.add(panel); // Default BorderLayout at position CENTER
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Math Owl: Alpha V:0.1 (coded by John)");
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
new MyCanvas();
}
}
frame.setVisible(true)
应该是您的最后一次通话。frame.setAlwaysOnTop(true)
和frame.setResizable(false)
是您通常希望从用户的角度避免的事情。frame.setSize(...)
应替换为frame.pack()
。frame.setLocationRelativeTo(null)
和pack()
之间调用setVisible(true)
。panel.setVisible(true)
,它对您没有任何帮助。panel.validate()
(应该是revalidate()
),只有在运行时更改布局时才需要它。Canvas
已存在,请使用其他名称。