Ir ao conteúdo

Visualizador de fontes + NullPointerException


Jonatan_7

Posts recomendados

Postado

Olá.

Bom, eu tava tentando fazer um visualizador de fontes usando Swing, mas o Java apontou o famoso NullPointerException, mas não consigo ver o que está errado.

Código:


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

public class FontDemo extends JFrame
{
private int fontSize;
private int fontStyle;
private String fontName;
private JTextArea texto;
private static final String conteudo = '\n' +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" + '\n' +
"abcdefghijklmnopqrstuvwxyz" + '\n' +
"0123456789¹²³£¢¬§ªº°+-*/\\|" + '\n' +
"'\".,;:?!@#$%&()[]{}<>_=" + '\n' +
"`´^~¨¯¸·‘’‚“”„‹›«»ƒ†‡•–" + '\n' +
"—˜ˆ¦€‰¡¿¤¥©®™±µ¶¼½¾×÷ß" + '\n' +
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØŒŠÙÚÛÜÝŸÞŽ" + '\n' +
"àáâãäåæçèéêëìíîïðñòóôõöøœšùúûüýÿþž" + '\n' +
"The quick brown fox jumps over the lazy dog.";

public FontDemo()
{
JPanel opções = new JPanel();
opções.setLayout(new GridLayout(2, 3));
String fontes[] =
GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
final JComboBox fonte = new JComboBox(fontes);
fonte.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setFonte((String)fonte.getSelectedItem());
}
});
String tamanhos[] =
{
"8", "9", "10", "11", "12", "14", "16", "18", "20",
"22", "24", "26", "28", "36", "48", "72"
};
final JComboBox tamanho = new JComboBox(tamanhos);
tamanho.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setTamanho(Integer.parseInt((String)tamanho.getSelectedItem()));
}
});
String estilos[] =
{
"Normal", "Negrito", "Itálico", "Negrito itálico"
};
final JComboBox estilo = new JComboBox(estilos);
estilo.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setEstilo((String)estilo.getSelectedItem());
}
});
fonte.setSelectedItem("Arial");
fontName = "Arial";
tamanho.setSelectedItem("14");
fontSize = 14;
estilo.setSelectedItem("Normal");
fontStyle = Font.PLAIN;
opções.add(new JLabel("Fonte"));
opções.add(new JLabel("Tamanho"));
opções.add(new JLabel("Estilo"));
opções.add(fonte);
opções.add(tamanho);
opções.add(estilo);
JPanel area = new JPanel();
area.setLayout(new GridLayout(1, 1));
texto = new JTextArea(null, 12, 45);
alterarFonte();
area.add(texto);
JPanel principal = new JPanel();
principal.setLayout(new BorderLayout());
principal.add(opções, BorderLayout.NORTH);
principal.add(area, BorderLayout.CENTER);
add(principal);
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

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

private void setFonte(String fonte)
{
fontName = fonte;
alterarFonte();
}

private void setTamanho(int tamanho)
{
fontSize = tamanho;
alterarFonte();
}

private void setEstilo(String estilo)
{
if(estilo.equals("Normal"))
fontStyle = Font.PLAIN;
else if(estilo.equals("Negrito"))
fontStyle = Font.BOLD;
else if(estilo.equals("Itálico"))
fontStyle = Font.ITALIC;
else if(estilo.equals("Negrito itálico"))
fontStyle = Font.BOLD + Font.ITALIC;
alterarFonte();
}

private void alterarFonte()
{
texto.setFont(new Font(fontName, fontStyle, fontSize));
texto.setText(fontName + conteudo);
}
}

Erro:


Exception in thread "main" java.lang.NullPointerException
at FontDemo.alterarFonte(FontDemo.java:119)
at FontDemo.setFonte(FontDemo.java:95)
at FontDemo.access$000(FontDemo.java:5)
at FontDemo$1.actionPerformed(FontDemo.java:32)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1242)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:569)
at FontDemo.<init>(FontDemo.java:60)
at FontDemo.main(FontDemo.java:89)

Por favor, me ajudem.

Postado

Já resolvi o problema.

Só precisava mover uma trecho de código.

Ele dava NullPointerException porque o JTextArea texto ainda não existia.

Como foi difícil achar um erro desses.

Bom, mas quem quiser, tá aí.


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

public class FontDemo extends JFrame
{
private int fontSize;
private int fontStyle;
private String fontName;
private JTextArea texto;
private static final String conteudo = '\n' +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" + '\n' +
"abcdefghijklmnopqrstuvwxyz" + '\n' +
"0123456789¹²³£¢¬§ªº°+-*/\\|" + '\n' +
"'\".,;:?!@#$%&()[]{}<>_=" + '\n' +
"`´^~¨¯¸·‘’‚“”„‹›«»ƒ†‡•–" + '\n' +
"—˜ˆ¦€‰¡¿¤¥©®™±µ¶¼½¾×÷ß" + '\n' +
"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØŒŠÙÚÛÜÝŸÞŽ" + '\n' +
"àáâãäåæçèéêëìíîïðñòóôõöøœšùúûüýÿþž" + '\n' +
"The quick brown fox jumps over the lazy dog.";

public FontDemo()
{
JPanel area = new JPanel();
area.setLayout(new GridLayout(1, 1));
texto = new JTextArea(null, 12, 45);
alterarFonte();
area.add(texto);
JPanel opções = new JPanel();
opções.setLayout(new GridLayout(2, 3));
String fontes[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
final JComboBox fonte = new JComboBox(fontes);
fonte.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setFonte((String)fonte.getSelectedItem());
}
});
String tamanhos[] =
{
"8", "9", "10", "11", "12", "14", "16", "18", "20",
"22", "24", "26", "28", "36", "48", "72"
};
final JComboBox tamanho = new JComboBox(tamanhos);
tamanho.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setTamanho(Integer.parseInt((String)tamanho.getSelectedItem()));
}
});
String estilos[] =
{
"Normal", "Negrito", "Itálico", "Negrito itálico"
};
final JComboBox estilo = new JComboBox(estilos);
estilo.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setEstilo((String)estilo.getSelectedItem());
}
});
fonte.setSelectedItem("Arial");
fontName = "Arial";
tamanho.setSelectedItem("14");
fontSize = 14;
estilo.setSelectedItem("Normal");
fontStyle = Font.PLAIN;
opções.add(new JLabel("Fonte"));
opções.add(new JLabel("Tamanho"));
opções.add(new JLabel("Estilo"));
opções.add(fonte);
opções.add(tamanho);
opções.add(estilo);
JPanel principal = new JPanel();
principal.setLayout(new BorderLayout());
principal.add(opções, BorderLayout.NORTH);
principal.add(area, BorderLayout.CENTER);
add(principal);
setSize(800, 600);
setTitle("Font Demo");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

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

private void setFonte(String fonte)
{
fontName = fonte;
alterarFonte();
}

private void setTamanho(int tamanho)
{
fontSize = tamanho;
alterarFonte();
}

private void setEstilo(String estilo)
{
if(estilo.equals("Normal"))
fontStyle = Font.PLAIN;
else if(estilo.equals("Negrito"))
fontStyle = Font.BOLD;
else if(estilo.equals("Itálico"))
fontStyle = Font.ITALIC;
else if(estilo.equals("Negrito itálico"))
fontStyle = Font.BOLD + Font.ITALIC;
alterarFonte();
}

private void alterarFonte()
{
texto.setFont(new Font(fontName, fontStyle, fontSize));
texto.setText(fontName + conteudo);
}

public static final long serialVersionUID = 20080823L;
}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!