我的代码的一个特点是,它显示了一个频率条形图,其中有给定的数据。在我的MacBook上,它工作的非常好,但是当我尝试在我的Razer刀片上使用它时,它并不像预期的那样工作。我提供了截图,所以你可以看到发生了什么,如果你可以给我一些关于这一点的见解。
Windows操作系统:https://gyazo.com/5107EED39D548687AD772A60E065055B
Mac操作系统:https://gyazo.com/6d32df9e08b9ce0c089dbe1b4d35af64
import javax.swing.*;
import java.awt.*;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args){
SwingUtilities.invokeLater(BarChartGUI::new);
}
}
class BarChartGUI extends JFrame{
public BarChartGUI(){
Map<String, Integer> frequencyTableData = getFrequencyTableData();
BarChart barChart = new BarChart(frequencyTableData);
JScrollPane chartScrollPane = new JScrollPane(barChart);
chartScrollPane.setPreferredSize(new Dimension(1000, 500));
add(chartScrollPane);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private Map<String, Integer> getFrequencyTableData(){
Map<String, Integer> frequencyTableData = new HashMap<>();
for (int i = 0; i < 2000; i++){
frequencyTableData.put(String.valueOf(i), i);
}
return frequencyTableData;
}
}
class BarChart extends JPanel {
// Space to draw Chart Information
public static final int TOP_BUFFER = 30;
public static final int AXIS_OFFSET = 20;
// Hashmap datatype holds the frequency of the String within the columnValues
private final Map<String, Integer> data;
// Stores dimension values
private int chartWidth;
private int chartHeight;
private int chartY;
public BarChart(Map<String, Integer> frequencyTableData){
super();
data = frequencyTableData;
setBackground(Color.white);
// Makes the Panel larger if the bar chart is not able to be fully displayed
if ((chartWidth / frequencyTableData.size() < 5)) {
setPreferredSize(new Dimension(5*frequencyTableData.size() + 50, getHeight()));
}
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
computeSize();
drawBars(g2);
}
// Retrieves the size of panel
private void computeSize() {
// Gets the chart's area size
chartWidth = this.getWidth() - 2*AXIS_OFFSET;
chartHeight = this.getHeight() - 2*AXIS_OFFSET - TOP_BUFFER;
// Get's the chart's coords for the origin
chartY = this.getHeight() - AXIS_OFFSET;
}
// Draws the Bar Chart depending on the values and its frequency stored within data
public void drawBars(Graphics2D g2) {
int numberOfBars = data.size();
double maxHeight = 0;
// Finds the height of the highest bar
for (Integer freq : data.values()) {
if (maxHeight < freq)
maxHeight = freq;
}
// Calculates width of bar
int barWidth = chartWidth / numberOfBars;
if ((chartWidth / numberOfBars) < 5){
barWidth = 5;
}
int value;
int barHeight;
int xLeftCord;
int yTopLeftCord;
int counter = 0;
g2.setColor(Color.black);
// Draws the bar for every key in the hashmap
for (String bar : data.keySet()) {
value = data.get(bar);
double barHeightDecimal = (value/maxHeight)* chartHeight;
barHeight = (int) barHeightDecimal;
xLeftCord = AXIS_OFFSET + counter * barWidth;
yTopLeftCord = chartY - barHeight;
Rectangle rec = new Rectangle(xLeftCord, yTopLeftCord, barWidth, barHeight);
g2.draw(rec);
counter++;
}
}
}
这个:
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
computeSize();
drawBars(g2);
}
缺少对Super的方法的调用:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
computeSize();
drawBars(g2);
}
没有这一点,JPanel就无法进行内务绘画或清除脏像素
问题内容: Oracle的可用下载列表上似乎没有32位下载程序包。 更新 可以在这里下载: 问题答案: 尽管Oracle的糟糕,未加密的 下载页面 似乎缺少JDK9的32位二进制文件,但是,如果(单击“接受许可协议”后)复制64位二进制文件的URL并更改 为 ,它将为您提供32 位二进制文件位二进制文件。 更新:现在不见了。怪异的!Oracle在玩什么?他们致力于修复Java 9的
问题内容: 是否可以在任何操作系统(例如Windows,Linux,Mac OS X)上执行JAR文件?我想构建一个要在Linux,Windows和Mac OS X上运行的简单应用程序。JAR文件可以在安装了Java的任何操作系统上运行吗? 问题答案: Jar文件可在存在JVM的任何OS上运行。
本文向大家介绍Ruby环境设置| 在Mac和Windows操作系统上安装Ruby,包括了Ruby环境设置| 在Mac和Windows操作系统上安装Ruby的使用技巧和注意事项,需要的朋友参考一下 Ruby环境设置 1)在Mac操作系统上安装Ruby Ruby已包含在默认的macOS安装中,但它不是最新版本。在以下步骤中,我们将使用Homebrew设置Ruby编程环境。您将必须使用终端应用程序提供的
问题内容: 我已经下载并安装了IDEA 13.1。但是,即使具有64位系统,Windows也会自动将程序安装在专用于32位程序的文件夹中。 是否有适用于64位版本的其他下载文件,或者可能有特殊设置以使其适合64位系统? 问题答案: 在中,有一个名为的可执行文件。这适用于64位系统。您只需将IntelliJ快捷方式路径更改为该路径即可。 您还需要添加一个指向您的64位JDK 的新环境变量,以便Int
操作系统:Windows 7终极版 处理器:AMD FX 8120 8核2.81 GHz 提前感谢!
我试图制作一个跨平台的JavaFX应用程序,它在Windows和OSX机器上工作得很好,但在Linux上不行。 jar是在Intellij思想中使用基本的JavaFX配置构建的。 有人帮忙吗?