Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助来修复GUI吗_Java_Swing - Fatal编程技术网

Java 需要帮助来修复GUI吗

Java 需要帮助来修复GUI吗,java,swing,Java,Swing,问题是条形图下的文本与条形图中的条形图不对齐。如何使它们正确对齐 为了让你的探测器闭嘴,我还可以为这个问题添加什么细节 import java.awt.*; 导入javax.swing.*; 导入java.awt.event.*; 公共类SimpleBarChart扩展了JPanel{ 私人双[]值; 私有字符串[]语言; 私有字符串标题; private int gapBetweenBars=40;//修改-不是原始代码的一部分 公共SimpleBarChart(双[]val,字符串[]lan

问题是条形图下的文本与条形图中的条形图不对齐。如何使它们正确对齐

为了让你的探测器闭嘴,我还可以为这个问题添加什么细节

import java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;
公共类SimpleBarChart扩展了JPanel{
私人双[]值;
私有字符串[]语言;
私有字符串标题;
private int gapBetweenBars=40;//修改-不是原始代码的一部分
公共SimpleBarChart(双[]val,字符串[]lang,字符串t){
语言=语言;
值=val;
title=t;
}
公共虚空绘制组件(图形){
super.paintComponent(图形);
if(value==null | | value.length==0){
返回;
}
双最小值=0;
双最大值=0;
for(int i=0;i值[i]){
最小值=值[i];
}
如果(最大值<值[i]){
最大值=值[i];
}
}
维度dim=getSize();
int clientWidth=dim.width;
int clientHeight=尺寸高度;
int barWidth=clientWidth/value.length;
barWidth=barWidth/3;//修改-不是原始代码的一部分
字体标题字体=新字体(“Book Antiqua”,Font.BOLD,15);
FontMetrics titleFontMetrics=graphics.getFontMetrics(titleFont);
Font labelFont=新字体(“Book Antiqua”,Font.PLAIN,10);
FontMetrics labelFontMetrics=graphics.getFontMetrics(labelFont);
int titleWidth=titleFontMetrics.stringWidth(标题);
int q=titleFontMetrics.getAscent();
INTP=(客户端宽度-标题宽度)/2;
graphics.setFont(标题字体);
图形.抽绳(标题,p,q);
int top=titleFontMetrics.getHeight();
int bottom=labelFontMetrics.getHeight();
如果(maxValue==minValue){
返回;
}
双刻度=(clientHeight-顶部-底部)/(maxValue-minValue);
q=clientHeight-labelFontMetrics.getDescent();
graphics.setFont(labelFont);
对于(int j=0;j=0){
valueQ+=(int)((最大值-值[j])*刻度);
}否则{
valueQ+=(int)(最大值*刻度);
高度=-高度;
}
图形。设置颜色(颜色。蓝色);
图形.fillRect(valueP,valueQ,条形宽度-2,高度);
图形.设置颜色(颜色.黑色);
graphics.drawRect(valueP、valueQ、条形宽度-2、高度);
int-labelWidth=labelFontMetrics.stringWidth(语言[j]);
p=j*条宽+(条宽-标签宽度)/2;
图形.抽绳(语言[j]、p、q);
}
}
公共静态void main(字符串[]args){
JFrame=新JFrame();
框架。设置尺寸(500500);
double[]值=新的double[5];
字符串[]语言=新字符串[5];
值[0]=1;
语言[0]=“Visual Basic”;
值[1]=2;
语言[1]=“PHP”;
数值[2]=3;
语言[2]=“C++”;
数值[3]=4;
语言[3]=“C”;
数值[4]=5;
语言[4]=“Java”;
frame.getContentPane();
WindowListener winListener=新的WindowAdapter(){
公共作废窗口关闭(WindowEvent事件){
系统出口(0);
}
};
frame.addWindowListener(winListener);
frame.setVisible(true);
}
公共void设置间隙中间条(内部间隙中间条){
this.gapBetweenBars=gapBetweenBars;
}
公共int getGapBetweenBars(){
返回此.gapBetweenBars;
}
}

在循环侧使用此选项

int labelWidth = labelFontMetrics.stringWidth(languages[j]);
p = j * (barWidth+gapBetweenBars) + (barWidth - labelWidth) / 2;

更改了语言字符串之间的空格计算

在循环中使用此选项

int labelWidth = labelFontMetrics.stringWidth(languages[j]);
p = j * (barWidth+gapBetweenBars) + (barWidth - labelWidth) / 2;

更改了语言字符串之间的空格计算

for循环中的
p
值不正确,应该是:

p = j * (barWidth + gapBetweenBars) + (barWidth - labelWidth) / 2;

您忘记考虑间隙。

for循环中
p
的值不正确,应该是:

p = j * (barWidth + gapBetweenBars) + (barWidth - labelWidth) / 2;

你忘了考虑差距。

哇!它起作用了。你是怎么做的?你是怎么想出来的?@SuperStar你的字符串没有正确地水平对齐,这意味着
p
的值不正确。在这之后,它就是基本的数学:
列的索引
/bar times(`width of bar+gap)+(barwidth/2)给出了列的中间部分。然后我们减去标签大小的一半,使其位于条的中心。就这些;-)哇!它起作用了。你是怎么做的?你是怎么想出来的?@SuperStar你的字符串没有正确地水平对齐,这意味着
p
的值不正确。在这之后,它就是基本的数学:
列的索引
/bar times(`width of bar+gap)+(barwidth/2)给出了列的中间部分。然后我们减去标签大小的一半,使其位于条的中心。就这些;-)欢迎来到stackoverflow。您最近发布了一些问题,其中快速描述了一个问题,然后跳过了一大块代码。你应该试着发布一些问题,这些问题可能也有助于其他来这里的人。像这样的问题太本地化了。在提出问题之前,你应该尽量缩小问题的范围,使其更有帮助。欢迎使用stackoverflow。您最近发布了一些问题,其中快速描述了一个问题,然后跳过了一大块代码。你应该试着发布问题