0

다음은 속성 편집기에서 대문자 대신 첫 번째로보고 싶은 예제입니다.IntelliJ IDEA GUI 디자이너에서 고유 한 속성 편집기를 추가하는 방법은 무엇입니까?

10 행은 수행하지만 11은 무시하고 표준 등록 정보 편집기를 연결하며 전혀 등록되지 않은 경우 등록 정보를 표시하지 않습니다.

package Components; 

import javax.swing.*; 
import java.beans.PropertyEditorSupport; 
import java.util.Arrays; 

public class TitlePositionEditor extends PropertyEditorSupport { 
    public String[] getTags() { 
     return tags; 
    } 

    public TitlePositionEditor() { 

     super(); 
     new JFrame().setVisible(true); 
    } 

    public String getJavaInitializationString() { 
     return ChartBean2.Position.class.getName().replace('$', '.') + "." + getValue(); 
    } 

    public String getAsText() { 
     int index = ((ChartBean2.Position) getValue()).ordinal(); 
     return tags[index]; 
    } 

    public void setAsText(String s) { 
     int index = Arrays.asList(tags).indexOf(s); 
     if (index >= 0) setValue(ChartBean2.Position.values()[index]); 
    } 

    private String[] tags = {"L", "C", "R"}; 
} 

package Components; 

import java.awt.*; 
import java.awt.font.*; 
import java.awt.geom.*; 
import javax.swing.*; 

/** 
* A bean to draw a bar chart. 
* @version 1.31 2007-10-03 
* @author Cay Horstmann 
*/ 


public class ChartBean2 extends JComponent 
{ 
    public ChartBean2() 
    { 
     setPreferredSize(new Dimension(XPREFSIZE, YPREFSIZE)); 
    } 

    public void paintComponent(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D) g; 

     if (values == null || values.length == 0) return; 
     double minValue = 0; 
     double maxValue = 0; 
     for (int i = 0; i < values.length; i++) 
     { 
     if (minValue > getValues(i)) minValue = getValues(i); 
     if (maxValue < getValues(i)) maxValue = getValues(i); 
     } 
     if (maxValue == minValue) return; 

     Rectangle2D bounds = getBounds(); 
     double clientWidth = bounds.getWidth(); 
     double clientHeight = bounds.getHeight(); 
     double barWidth = (clientWidth - 2 * INSETS)/values.length; 

     g2.setPaint(inverse ? color : Color.white); 
     g2.fill(new Rectangle2D.Double(0, 0, clientWidth, clientHeight)); 
     g2.setPaint(Color.black); 

     Font titleFont = new Font("SansSerif", Font.BOLD, 20); 
     FontRenderContext context = g2.getFontRenderContext(); 
     Rectangle2D titleBounds = titleFont.getStringBounds(title, context); 

     double titleWidth = titleBounds.getWidth(); 
     double y = -titleBounds.getY(); 
     double x = 0; 
     if (titlePosition == Position.CENTER) x += (clientWidth - titleWidth)/2; 
     else if (titlePosition == Position.RIGHT) x += clientWidth - titleWidth; 

     g2.setFont(titleFont); 
     g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
      RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
     g2.drawString(title, (float) x, (float) y); 

     double top = titleBounds.getHeight(); 
     double scale = (clientHeight - top - 2 * INSETS)/(maxValue - minValue); 
     y = clientHeight; 

     for (int i = 0; i < values.length; i++) 
     { 
     double x1 = INSETS + i * barWidth + 1; 
     double y1 = INSETS + top; 
     double value = getValues(i); 
     double height = value * scale; 
     if (value >= 0) y1 += (maxValue - value) * scale; 
     else 
     { 
      y1 += (int) (maxValue * scale); 
      height = -height; 
     } 

     g2.setPaint(inverse ? Color.white : color); 
     Rectangle2D bar = new Rectangle2D.Double(x1, y1, barWidth - 2, height); 
     g2.fill(bar); 
     g2.setPaint(Color.black); 
     g2.draw(bar); 
     } 
    } 

    /** 
    * Sets the title property. 
    * @param t the new chart title. 
    */ 
    public void setTitle(String t) 
    { 
     title = t; 
    } 

    /** 
    * Gets the title property. 
    * @return the chart title. 
    */ 
    public String getTitle() 
    { 
     return title; 
    } 

    /** 
    * Sets the indexed values property. 
    * @param v the values to display in the chart. 
    */ 
    public void setValues(double[] v) 
    { 
     values = v; 
    } 

    /** 
    * Gets the indexed values property. 
    * @return the values to display in the chart. 
    */ 
    public double[] getValues() 
    { 
     return values; 
    } 

    /** 
    * Sets the indexed values property. 
    * @param i the index of the value to set 
    * @param value the new value for that index 
    */ 
    public void setValues(int i, double value) 
    { 
     if (0 <= i && i < values.length) values[i] = value; 
    } 

    /** 
    * Gets the indexed values property. 
    * @param i the index of the value to get 
    * @return the value for that index 
    */ 
    public double getValues(int i) 
    { 
     if (0 <= i && i < values.length) return values[i]; 
     return 0; 
    } 

    /** 
    * Sets the inverse property. 
    * @param b true if the display is inverted (white bars on colored background) 
    */ 
    public void setInverse(boolean b) 
    { 
     inverse = b; 
    } 

    /** 
    * Gets the inverse property. 
    * @return true if the display is inverted 
    */ 
    public boolean isInverse() 
    { 
     return inverse; 
    } 

    /** 
    * Sets the titlePosition property. 
    * @param p LEFT, CENTER, or RIGHT 
    */ 
    public void setTitlePosition(Position p) 
    { 
     titlePosition = p; 
    } 

    /** 
    * Gets the titlePosition property. 
    * @return LEFT, CENTER, or RIGHT 
    */ 
    public Position getTitlePosition() 
    { 
     return titlePosition; 
    } 

    /** 
    * Sets the graphColor property. 
    * @param c the color to use for the graph 
    */ 
    public void setGraphColor(Color c) 
    { 
     color = c; 
    } 


    public Color getGraphColor() 
    { 
     return color; 
    } 

    public enum Position { LEFT, CENTER, RIGHT }; 

    private static final int XPREFSIZE = 300; 
    private static final int YPREFSIZE = 300; 

    private static final int INSETS = 10; 

    private double[] values = { 1, 2, 3 }; 
    private String title = "Title"; 
    private Position titlePosition = Position.CENTER; 
    private boolean inverse; 
    private Color color = Color.red; 
} 

답변

관련 문제