Andere Schriftart in Combo oder Listbox
-
Hallo
ich will eine JComboBox oder JListBox eine andere Schriftart setzen.
Das besondere ist das ich 3 verschiedene verwenden muss.Wie geht das?
-
Erklär das doch mal bitte etwas genauer. Du sagst du brauchst 3 Schriftarten aber nicht wo du diese brauchst. Abwechselnd für jeden Eintrag oder nur im selektierten Zustand ... ein bißche mehr Detail bitte.
-
OK Entschuldigung.
Ich werde probieren das nächste mal gleich genauer zu posten.
Wenn du Word Startest kannst du in einer Combobox Schriften Auswählen. Die Einzelnen Einträge sind in der jeweiligen Schrift.
-
Aha verstehe. Dafür muss man einen sogenannten ListRenderer benutzen. Ich poste mal ein Beispiel eines Font-Selektors. [java]/*
* ListRendererDemo.java
*
* Created on 4. März 2003, 16:00
* by Cengiz Sahin (javaCore)
*/package de.javacore.gui;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import javax.swing.DefaultComboBoxModel;
/** Demo for ListRenderers
*
* @author Sahin Cengiz (javaCore)
*/
public class ListRendererDemo extends javax.swing.JFrame {/** Creates a new form ListRendererDemo */
public ListRendererDemo() {
initComponents();
DefaultComboBoxModel mcbm = new DefaultComboBoxModel();
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font fonts[] = ge.getAllFonts();
for (int i=0; i<fonts.length-1; i++) {
mcbm.addElement(fonts[i]);
}jComboBox1.setModel(mcbm);
jComboBox1.setRenderer(new ComboBoxRenderer());}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jComboBox1 = new javax.swing.JComboBox();
jLabel2 = new javax.swing.JLabel();setTitle("ListRendererDemo (FontSelector)");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);
getContentPane().add(jPanel2, java.awt.BorderLayout.EAST);
getContentPane().add(jPanel3, java.awt.BorderLayout.SOUTH);
getContentPane().add(jPanel4, java.awt.BorderLayout.WEST);
jPanel5.setLayout(new java.awt.BorderLayout());
jPanel6.setLayout(new java.awt.BorderLayout(5, 5));
jLabel1.setText("Font:");
jPanel6.add(jLabel1, java.awt.BorderLayout.WEST);jComboBox1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jComboBox1ItemStateChanged(evt);
}
});jPanel6.add(jComboBox1, java.awt.BorderLayout.CENTER);
jPanel5.add(jPanel6, java.awt.BorderLayout.NORTH);
jLabel2.setText("the quick brown fox jumps over the lazy dog");
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jPanel5.add(jLabel2, java.awt.BorderLayout.CENTER);getContentPane().add(jPanel5, java.awt.BorderLayout.CENTER);
pack();
}
/** Called whenever the value in the combobox has changed */
private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {
Font theFont = (Font)jComboBox1.getSelectedItem();
jComboBox1.setFont(new java.awt.Font(theFont.getName(), theFont.getStyle(), 14));
jLabel2.setFont(jComboBox1.getFont());
}/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}/**
* @param args the command line arguments
*/
public static void main(String args[]) {
new ListRendererDemo().show();
}// Variables declaration - do not modify
private javax.swing.JComboBox jComboBox1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel6;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel1;
// End of variables declaration}
/** Benutzerdefinierter Renderer um in der ComboBox diverse Fonts anzeigen zu können */
class ComboBoxRenderer extends javax.swing.JLabel implements javax.swing.ListCellRenderer {
public ComboBoxRenderer() {
setOpaque(true);
setHorizontalAlignment(CENTER);
setVerticalAlignment(CENTER);
}public java.awt.Component getListCellRendererComponent(
javax.swing.JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {Font theFont = (Font)value; // Vorsicht! Es muss nicht immer ein String sein!
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}setText(theFont.getName());
// Eigentlich passiert alles hier ...
setFont(new Font(theFont.getName(), theFont.getStyle(), 14));return this;
}
}[/code]
Edit: Für diejenigen die keine Verzeichnisstruktur .../de/javacore/gui anlegen möchten rate ich einfach die Zeile mit der package-Anweisung aus dem Programm zu entfernen.[ Dieser Beitrag wurde am 04.03.2003 um 16:44 Uhr von CengizS editiert. ]
-
@Cengiz: Das Programm läßt sich nicht starten:
Exception in thread "main" java.lang.NoClassDefFoundError: ListRendererDemo (wrong name: de/javacore/gui/ListRendererDemo) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:502) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) at java.net.URLClassLoader.defineClass(URLClassLoader.java:250) at java.net.URLClassLoader.access$100(URLClassLoader.java:54) at java.net.URLClassLoader$1.run(URLClassLoader.java:193) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:186) at java.lang.ClassLoader.loadClass(ClassLoader.java:299) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265) at java.lang.ClassLoader.loadClass(ClassLoader.java:255) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
-
Dann speichere es doch unter dem Verzeichnis de/javacore/gui
Das ist nämlich der Sinn von Packages
Oder mach einfach die Package-Anweisung dort weg ... dann gehts auch