2015-01-21 7 views
1

자바에서 약간의 텍스트 편집기를 만들 겠지만 다른 종류의 글꼴은 해당 글꼴의 콤보 상자에 표시됩니다. 이유는 사용자가 해당 글꼴을 볼 수 있기 때문입니다.자바에서 콤보 상자와 다른 글꼴

C#에 대한 콤보 상자 항목을 사용할 수 있다는 것을 알고 있습니다. 하지만 자바에 대해서는 몰랐습니다.

아무도 도와 줄 수 있습니까?

편집 : 당신이 당신의 콤보 상자에 대한 사용자 정의 렌더러를 구현해야처럼

This is what I want more or less

+1

예. 내 기사 인 [Java Font Chooser] (http://java-articles.info/articles/?p=272)를 읽어보십시오. –

+0

@GilbertLeBlanc Oké,하지만 내가 중계하고 싶은 것은 Word와 마찬가지로 내 콤보 상자에서 글꼴 유형을 볼 수 있다는 것입니다. –

+0

Java Swing 콤보 상자는 Word의 콤보 상자처럼 작동하지 않습니다. 다른 글꼴은 스윙 콤보 상자를 왜곡합니다. 그래서 메모장 용 글꼴 선택기를 만들었습니다. –

답변

3

는 소리.

다음

이 코드 자바 글꼴 선택

class CustomRenderer implements ListCellRenderer 
{ 

    @Override 
    public Component getListCellRendererComponent(JList list, Object value, 
      int index, boolean isSelected, boolean cellHasFocus) { 

     JLabel label = new JLabel(); 
     label.setFont(((Font) value).deriveFont(12f)); 
     label.setText(((Font) value).getFontName()); 
     return label; 
    } 

} 
+0

메서드가 호출 될 때마다 레이블을 만드는 것은 불필요하고 낭비입니다. –

+0

원래 대답은 올바른 아이디어를 제공합니다 ...하지만 Andrew는 정확합니다. 매번 새로운 JLabel을 만드는 것은 불필요합니다. 새 JLabel을 만들지 않으려면 CustomRenderer에서 ListCellRenderer를 구현하는 것 외에도 JLabel을 확장 한 다음 새 레이블 대신 "this"를 반환 할 수 있습니다. 또는 레이블을 CustomRenderer의 필드로 지정하십시오. – Amber

+0

btw. 당신에게 아이콘을 두는 방법? –

0

사용자 정의 콤보 상자 : http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer

즉, 이런 식으로 뭔가 (콤보 상자에서 개체 가정이다 글꼴) : 여기에 자바 자습서를 참조하십시오 : 코드의

package stack; 

import java.awt.Component; 
import java.awt.FlowLayout; 
import java.awt.Font; 
import java.awt.GraphicsEnvironment; 

import javax.swing.ImageIcon; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.ListCellRenderer; 

public class CustomComboBox { 
    JComboBox fontComboBox; 
    JFrame frame; 
    String fontName[]; 
    Integer array[]; 

    public CustomComboBox() { 
    JFrame.setDefaultLookAndFeelDecorated(true); 

    frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    fontName = ge.getAvailableFontFamilyNames(); 
    array = new Integer[fontName.length]; 
    for(int i=1;i<=fontName.length;i++) { 
     array[i-1] = i; 
    } 

    fontComboBox = new JComboBox(array); 
    ComboBoxRenderar renderar = new ComboBoxRenderar(); 
    fontComboBox.setRenderer(renderar); 

    frame.getContentPane().setLayout(new FlowLayout()); 
    frame.getContentPane().add(fontComboBox); 

    frame.pack(); 
    frame.setVisible(true); 
    } 

    public class ComboBoxRenderar extends JLabel implements ListCellRenderer { 

    @Override 
    public Component getListCellRendererComponent(JList list, 
                Object value, 
                int index, 
                boolean isSelected, 
                boolean cellHasFocus) { 
     int offset = ((Integer)value).intValue() - 1 ; 
     String name = fontName[offset]; 
     setText(name); 
     setFont(new Font(name,Font.PLAIN,20)); 
     return this; 
    } 
} 
    public static void main(String args[]) { 
    new CustomComboBox(); 
    } 
} 

및 미리보기 이미지 를 참조하십시오 enter image description here

관련 문제