我正在编写一个Java代码来显示班级学生已达到的成绩。我有一个小问题。我想使用两个滑块,一个用于调整文本(输出)字体大小,另一个滑块用于调整字母之间的间距。例如,当我在标记为#of Grade As的JLabel框中输入数字“5”时,按下按钮“显示输出为字母串”,我得到结果:“等级为:AAAAA。 “我想做的(如上所述)是调整字母A的大小,并调整连续字母As之间的间距。有人可以告诉我如何做到这一点。我当然知道我必须设置一个JSlider,但到底我该怎么做?我的部分代码如下:
if ( e.getSource() == displayChartButton ) {
checkAndRecordData();
Graphics g = chartPanel.getGraphics();
g.setColor(Color.white);
g.fillRect(20,20,410,52);
g.setColor(Color.black);
g.drawRect(20,20,410,52);
g.setColor( Color.black );
g.drawString( "Grade As: " + gradeAs, chartLeftXA, chartTopYA );
}
if (e.getSource() == displayLongString) {
Graphics g = chartPanel.getGraphics();
g.setColor(Color.white);
g.fillRect(20,20,410,52);
g.setColor(Color.black);
g.drawRect(20,20,410,52);
g.setColor( Color.black );
g.drawString( "Grade As: " + longStringA, 100, 50 );
}
private void checkAndRecordData() {
gradeAs = tempAs;
longStringA = "";
String gradeLetterA = "A";
for (int i=0; i<tempAs; i++)
longStringA += gradeLetterA;
}
public void stateChanged(ChangeEvent event) {
int size = slider.getValue();
}
一旦我到达最后一行,int size = slider.getValue(),我不知道该怎么做。记住,我有两件事要做。一种是调整字母的大小,另一种是调整字母之间的间距,因此我需要两个滑块。有人可以帮忙吗?
答案 0 :(得分:1)
您可以通过子组件的递归轻松完成
public static void changeFont(Component component, int fontSize) {
Font f = component.getFont();
component.setFont(new Font(f.getName(), f.getStyle(), f.getSize() + fontSize));
if (component instanceof Container) {
for (Component child : ((Container) component).getComponents()) {
changeFont(child, fontSize);
}
}
}
您甚至可以为子组件设置自己的字体或字体大小 通过获取组件的名称
public static void changeFont(Component component, int fontSize) {
Font f = component.getFont();
component.setFont(new Font(f.getName(), f.getStyle(), f.getSize() + fontSize));
if (component instanceof Container) {
for (Component child : ((Container) component).getComponents()) {
if(child.getName().equals("myComponentName")){
//set font to the component
}else{
changeFont(child, fontSize);
}
}
}
}
并从一个事件调用此方法,就像在这里我发布它将如何更改字体大小随着滑块的值的变化 其中sldValue是我的全局变量,用于存储旧的滑块值
if (!((JSlider) evt.getSource()).getValueIsAdjusting()) {
changeFont(this, sldFontSet.getValue() - sldValue);
sldValue = sldFontSet.getValue();
}
对于间距我很抱歉