Java 带画布和Jpanel布局的Jframe

Java 带画布和Jpanel布局的Jframe,java,swing,jpanel,Java,Swing,Jpanel,我刚刚开始为lwjgl引擎制作GUI。我有一个画布在左手边,我想有一个JPanel在右边预览纹理。然而,正如您所看到的,图像几乎不可见。我尝试了不同的边界布局,尝试调整大小等。。然而,我认为我只是在做一些根本错误的事情 我的小组课 public class Panel extends JPanel { BufferedImage image; public Panel(){ try { image = ImageIO.read(new File("C:/Users/t

我刚刚开始为lwjgl引擎制作GUI。我有一个画布在左手边,我想有一个JPanel在右边预览纹理。然而,正如您所看到的,图像几乎不可见。我尝试了不同的边界布局,尝试调整大小等。。然而,我认为我只是在做一些根本错误的事情

我的小组课

public class Panel extends JPanel {
BufferedImage image;

public Panel(){
try {
    image = ImageIO.read(new         
File("C:/Users/tom/Desktop/raj/Jtest/src/AWT/house.png"));
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

}
public void paintComponent(Graphics g){
 // super.paint(g);

g.drawImage(image,0, 0, null);

}
下面是我如何实现它的

 public static void main(String[] args) 
  {

     Panel panel = new Panel();
     UIManager.setLookAndFeel("com.jtattoo.plaf.hifi.HiFiLookAndFeel");
     JFrame frame = new JFrame("World Editor");
     frame.setLayout(new BorderLayout());
     final Canvas canvas = new Canvas();

    button1.setSize(100, 100);
    button1.setLocation(600, 10);
   button1.setText("Test");
    canvas.addComponentListener(new ComponentAdapter() {
        @Override

        public void componentResized(ComponentEvent e)
        {  canvas.setSize(800, 600);

            newCanvasSize.set(canvas.getSize());
            }
     });



     frame.setBackground(Color.black);
     frame.add(button1);
     frame.add(panel,BorderLayout.EAST);
     frame.getContentPane().add(canvas,BorderLayout.CENTER);

     try {
        Display.setParent(canvas);
        Display.setVSyncEnabled(true);

        frame.setPreferredSize(new Dimension(1600, 1400));
        frame.setMinimumSize(new Dimension(800, 600));
        frame.pack();
        frame.setVisible(true);

        Display.create();
        etc...
设置应该是这样的


您是否已尝试为背景标签设置图像并调整其大小?大概是这样的:
不要使用画布。这是一个AWT类,您不应该在Swing应用程序中混合使用AWT组件。我不确定画布的意义是什么,但您可能应该使用JPanel

不要叫你班级小组。已存在具有该名称的AWT类。类名应该更具描述性


事实上,甚至不要创建自定义类。只需使用带有图像图标的JLabel即可显示图像。我猜问题在于您没有覆盖Panel类的getPreferredSize方法,因此大小默认为10,10是面板的大小,因为您使用的是FlowLayout。因此,使用JLabel easy解决方案或实现getPreferredSize方法来反映图像的大小。

将GridLayout设置为JFrame new GridLayout0,2 这样,JFrame就有了左侧和右侧。然后创建两个JPanel并将其添加到Jframe中。不要忘记调整面板和框架的大小。
之后,创建一个标签,为其设置图标图像,调整其大小并将其添加到右侧面板。

我的主要问题是布局,上面的代码与gui有关。我试图用translate、resize等来定位jpanel,但出于某种原因,显示jpanel的唯一方法是将borderlayout设置为East。否则,一个与另一个重叠,最后一个是ever Frame.add调用,这是唯一显示的调用。哦,还有Jbutton,我只是在玩这个。我可以定位在任何地方。设置为JFrame a GridLayout。Ty,我是新手,我可能在做一些不应该混合的事情。画布用于显示我的LWJGL显示。如果没有画布,我怎么能显示我的窗口呢?啊,crud,display.setParentcanvas;是一个包含画布参数的lwjgl函数。我对lwjgl一无所知,但在使用游戏库之前,您应该先了解Swing的基本知识。显示图像是一个基本概念,使用JLabel即可轻松完成,无需LWJGL。
      ePanel panel = new ePanel(0, 0);


      UIManager.setLookAndFeel("com.jtattoo.plaf.hifi.HiFiLookAndFeel");
      JFrame frame = new JFrame("World Editor");

      frame.setLayout(new BorderLayout());
     canvas = new Canvas();
     canvas.setSize(1200, 600);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setLayout(new BorderLayout());
     button1.setSize(100, 100);
     button1.setText("TEST");
     frame.add(button1);
     frame.add(canvas,BorderLayout.WEST);
     frame.add(panel, BorderLayout.CENTER);
     frame.pack();
     frame.setLocationRelativeTo(null);
     frame.setVisible(true);