当前位置: 首页 > 知识库问答 >
问题:

JPanel未显示

冷夜洛
2023-03-14

我直接从书上抄了这些例子。代码应该在JFrame上绘制一些东西,但没有显示任何东西(除了JFrame),这里是带有main方法的类

import java.awt.BorderLayout;
import javax.swing.JFrame;

public class JavaApplication24 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    JFrame frame = new JFrame("Window");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setSize(480,270);

    frame.setVisible(true);
    NewClass panel = new NewClass();

    frame.add(BorderLayout.CENTER, panel);

    }

下面是JPanel的一个子类

import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JPanel;


public class NewClass extends JPanel {

    @Override
    public void paintComponent(Graphics g){
        g.setColor(Color.BLUE);
        g.fillRect(0,0,100,100);

        g.setColor(Color.GREEN);
        g.drawRect(50,50,100,100);

        g.setColor(Color.RED);
        g.drawString("Hello",200,200);

        g.setColor(Color.RED);
        g.fillOval(240,40,100,30);

    }
}

共有1个答案

王伯寅
2023-03-14

您的newclass应该提供大小调整提示,布局管理器(在本例中为borderlayout)可以决定如何最好地布局组件。

在进行任何自定义绘制之前,还应该调用super.paintcomponent,否则将导致呈现工件的结束

public class NewClass extends JPanel {

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 400);
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        g.fillRect(0, 0, 100, 100);

        g.setColor(Color.GREEN);
        g.drawRect(50, 50, 100, 100);

        g.setColor(Color.RED);
        g.drawString("Hello", 200, 200);

        g.setColor(Color.RED);
        g.fillOval(240, 40, 100, 30);

    }
}

我直接从书上抄了例子

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                ex.printStackTrace();
            }
            
            JFrame frame = new JFrame("Testing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new NewClass());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    });
}
frame.setVisible(true);
NewClass panel = new NewClass();

frame.add(BorderLayout.CENTER, panel);
NewClass panel = new NewClass();
frame.add(BorderLayout.CENTER, panel);    
frame.setVisible(true);
 类似资料:
  • 我知道同样的问题已经被问过很多次了,但是我似乎真的没有在我的代码中发现阻碍JPanel类型的对象显示在JFrame中的错误。下面是扩展JFrame的类的构造函数: 当我运行main方法(这里没有显示)时,它只显示框架和按钮。如果有人能在这方面给点提示,我会非常感谢的。

  • 问题内容: 我有一个JFrame根据您单击的MenuItem显示JPanels。它可以工作,但是现在我需要在将JPanel添加到框架中并显示 它之后调用一个方法(因为我在该面板内使用JFreeChart,并且必须在可见JPanel时调用): 看起来还好吗?是被真出?似乎不是: 这是不工作(被 抛出异常)。这意味着 在调用repaint时,JPanel不可见,我已经测试了以下内容: 现在它可以正常工

  • 问题内容: 有人可以告诉我为什么组合框不显示吗?我有一个控制器: 和一个观点 由于TestController中的 setLayout(null) ,我看不到comboBox。如果我将 add(cgView.comboBox)添加 到TestContoller()中,则它看起来像这样: 比我能看到的。有人可以告诉为什么吗? 因此,我的解决方案是始终将组件添加到TestController中,或通过

  • 我有一个扩展JFrame的类。它使用以下代码将180个图像加载到数组中 更新:我尝试使用一个JLabel而不是我的ImagePanel类。JLabel似乎也有同样的问题。当我使用JPEG时,它会显示,但当我使用PNG时,它什么也不显示。

  • 问题内容: 在JPanel上显示jpg图像(从本地文件夹加载)的最合适的图像类型是什么? 干杯。 问题答案:

  • 问题内容: 这是一个非常简单的程序,我已尽力而为,但JPanel并未提供背景图片。我只希望面板上有一个简单的背景图像。 这是我的代码: 提前致谢 问题答案: 更换 与