java - 在 JPanel 上创建条形图

标签 java swing user-interface jpanel paint

谁能告诉我这到底是怎么回事?我对 Java 还很陌生,我似乎不明白为什么这不会打开 JPanel 或矩形或字符串。没有显示任何内容,但它确实可以编译。

代码:

import java.awt.*;
import javax.swing.*;

public class Graphing extends JPanel
{

   public static void main (String[] args)
   {
   }

   public Graphing()
   {
      JFrame frame = new JFrame ("Nested Panels");
      frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

      frame.getContentPane();
      frame.setPreferredSize(new Dimension(350,200));
      frame.pack();
      frame.setVisible(true);
   }

   public void paintComponent (Graphics page)
   {            
      super.paintComponent (page);          
      final int HEIGHT = 10;

      page.setColor (Color.yellow);
      page.fillRect (50, 50, (7*10), HEIGHT);//1-10
      page.fillRect (50, 64, (5*10), HEIGHT);//11-20
      page.fillRect (50, 78, (0*10), HEIGHT);//21-30
      page.fillRect (50, 92, (1*10), HEIGHT);//31-40
      page.fillRect (50, 106, (9*10), HEIGHT);//41-50
      page.fillRect (50, 120, (12*10), HEIGHT);//51-60
      page.fillRect (50, 134, (4*10), HEIGHT);//61-70
      page.fillRect (50, 148, (6*10), HEIGHT);//71-80
      page.fillRect (50, 162, (2*10), HEIGHT);//81-90
      page.fillRect (50, 176, (13*10), HEIGHT);//91-100

      page.drawString("1-10",10,60);
      page.drawString("11-20",10,74);
      page.drawString("21-30",10,88);
      page.drawString("31-40",10,102);
      page.drawString("41-50",10,116);
      page.drawString("51-60",10,130);
      page.drawString("61-70",10,144);
      page.drawString("71-80",10,158);
      page.drawString("81-90",10,172);
      page.drawString("91-100",10,186);

      page.drawString("7", 30, 60);
      page.drawString("5", 30, 74);
      page.drawString("0", 30, 88);
      page.drawString("1", 30, 102);
      page.drawString("9", 30, 116);
      page.drawString("12", 30, 130);
      page.drawString("4", 30, 144);
      page.drawString("6", 30, 158);
      page.drawString("2", 30, 172);
      page.drawString("13", 30, 186);
   }

}

最佳答案

public Graphing()   {
  JFrame frame = new JFrame ("Nested Panels");
  frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

  frame.getContentPane().add(this);

在主目录

public static void main(String[] args) {
    new Graphing();
} 

要完全做到 Kosher,主要方法实际上应该是:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
           new Graphing();
        }
    });
} 

此时,您不必了解第二个主方法代码的详细信息,但要知道它确保在主 Swing 线程上调用 Swing GUI。这样做可以帮助避免不可预测的线程问题,这些问题在简单的程序中不太可能发生,但如果代码变得稍微复杂一点,则可能会发生。

其他问题 - 您需要尽量避免使用魔数(Magic Number)、硬编码数字,而是使用变量,这样您可以更轻松地更改条形的高度。

关于java - 在 JPanel 上创建条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26517955/

相关文章:

java - 单击“下一步”后无法更改 jScrollPane 中的图像

java - 修改 addMouseListener()

java - Android布局阴影

java - 在多个主机上使用Java中的zip算法压缩文件

java - 单选按钮不显示选定状态

java - 使用流 api 从 Stream<@Nullable T> 转换为 Stream<@NonNull T>

java - JSONObject.toMap() 实现

java - 将 JApplet 添加到 JPanel

javascript - 双击后出现奇怪的 UI 行为

java - 黑莓应用程序中的菜单项