我正在制作一个wordpad程序并试图创建一个JComboBox来改变字体大小。它运行/编译并显示我的选项,但是当我点击索引时,字体大小不会改变。这是修改字体大小的唯一方法,任何使其有效的建议吗?
fontsize.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
if(fontsize.getSelectedIndex()==0)
{
txt.setFont(txt.getFont().deriveFont(10));
txt.setLineWrap(true);
}
else if(fontsize.getSelectedIndex()==1){
Font fontss = txt.getFont();
Font biggerFont = fontss.deriveFont(10);
txt.setFont(biggerFont);
txt.setLineWrap(true);
}
else if(fontsize.getSelectedIndex()==2){
Font fontss = txt.getFont();
Font biggerFont = fontss.deriveFont(10);
txt.setFont(biggerFont);
txt.setLineWrap(true);
}
else if(fontsize.getSelectedIndex()==3){
Font fontss = txt.getFont();
Font biggerFont = fontss.deriveFont(10);
txt.setFont(biggerFont);
txt.setLineWrap(true);
}
else{}
}
}
);
答案 0 :(得分:1)
为什么这个字体不会改变大小?
因为你没有改变大小。
您可能希望查看Java API for Font并查看deriveFont(int)
实际意味着什么。
您应该在deriveFont(int style)
的参数列表中放置 字体样式 ,而不是 字体大小 即可。这就是无法更改字体大小的原因。
public Font deriFont(int style)
通过复制当前Font对象并对其应用新样式来创建新的Font对象。
参数:style - 新字体的样式
如果要更改当前字体的字体大小,可以执行以下操作:
Font currFont = txt.getFont();
int newSize = 20;
txt.setFont(new Font(currFont.getName(), currFont.getStyle(), newSize));
答案 1 :(得分:1)
使用以float作为参数的deriveFont方法,这个方法将创建一个具有相同参数但新大小的新Font。
Font biggerFont = fontss.deriveFont((float)10);
答案 2 :(得分:0)
.eq(0)
的参数始终是10.而不是像在这种情况下那样对数字进行硬编码,可能是复制和粘贴错误,使用地图将索引与字体大小相关联可能是有益的并使用索引(作为键)来访问字体或字体大小。
答案 3 :(得分:0)
以上是上述代码的工作版本。 JTextArea.setFont只能接受一个字体参数,你必须使用JTextArea的当前字体创建一个新字体,然后将sai字体设置为
的参数JTextArea.setFont(myFont);
fontsize.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{Font currFont = txt.getFont();
if(fontsize.getSelectedIndex()==0)
{
int newSize = 10;
Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
txt.setFont(myIdea);
txt.setLineWrap(true);
}
else if(fontsize.getSelectedIndex()==1){
int newSize = 12;
Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
txt.setFont(myIdea);
txt.setLineWrap(true);
}
else if(fontsize.getSelectedIndex()==2){
int newSize = 14;
Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
txt.setFont(myIdea);
txt.setLineWrap(true);
}
else if(fontsize.getSelectedIndex()==3){
int newSize = 16;
Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
txt.setFont(myIdea);
txt.setLineWrap(true);
}
else{}
}
}
);
答案 4 :(得分:0)
这就是我使用HashMap解决此问题的方法。
fontsize.addActionListener(
new ActionListener(){
HashMap<Integer, Integer> fontSizeMap = new HashMap<Integer, Integer>();
int max = 4;
int minSize = 10;
{
for(int i = 0; i< max; i++) {
int fontSize = newSize + (2 * i);
fontSizeMap.put(i, fontSize);
}
}
public void actionPerformed (ActionEvent e) {
Font currFont = txt.getFont();
int index = fontsize.getSelectedIndex();
if(fontSizeMap.get(index) != null)
{
int newSize = fontSizeMap.get(index);
Font myIdea = new Font(currFont.getFontName(),currFont.getStyle(),newSize);
txt.setFont(myIdea);
txt.setLineWrap(true);
} else {
// do nothing or handle this case differently.
}
}
});