import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.StringTokenizer; import javax.swing.*; import com.sun.xml.parser.Resolver; import com.sun.xml.tree.XmlDocument; import org.xml.sax.InputSource; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** Отображение цвета при помощи цветовой полоски */ class ColorCellRenderer extends JLabel implements ListCellRenderer { public ColorCellRenderer() { setPreferredSize(new Dimension(50,15)); setBorder( BorderFactory.createCompoundBorder( BorderFactory.createEmptyBorder(2,5,2,5), BorderFactory.createRaisedBevelBorder() ) ); } private Color color; public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Color c = (Color)value; color = c; setForeground(isSelected ? list.getSelectionForeground(): list.getForeground()); setBackground(isSelected ? list.getSelectionBackground(): list.getBackground()); return this; } public void paintComponent(Graphics g) { g.setColor( getBackground() ); g.fillRect(0,0,getWidth(),getHeight()); Insets insets = getInsets(); int w = getWidth()-insets.left-insets.right; int h = getHeight()-insets.top-insets.bottom; g.setColor( color ); g.fillRect(insets.left,insets.top,w,h); } } public class XMLConfig extends JFrame { /** Список доступных цветов */ static Color[] colorList = new Color[] { Color.black,Color.white, Color.red,Color.magenta,Color.green,Color.yellow,Color.cyan,Color.blue }; JTextArea edit = new JTextArea("Просто строчка"); JComboBox box = new JComboBox( colorList ); XMLConfig() { super("Color chooser"); setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); addWindowListener(new WindowHandler()); getContentPane().add(edit,BorderLayout.CENTER); box.setRenderer(new ColorCellRenderer()); box.addActionListener(new ColorBoxListener()); getContentPane().add(box,BorderLayout.SOUTH); pack(); // Чтение конфигурации try { loadConfig(); } catch( Exception ex ) { JOptionPane.showMessageDialog(this,ex.toString(), "Ошибка чтения конфигурационного файла",JOptionPane.WARNING_MESSAGE ); } } class ColorBoxListener implements ActionListener { public void actionPerformed(ActionEvent e) { edit.setForeground( (Color)box.getSelectedItem() ); } } class WindowHandler extends WindowAdapter { public void windowClosing(WindowEvent evt) { // Сохранение конфигурации при выходе из программы try { saveConfig(); } catch( Exception ex ) { JOptionPane.showMessageDialog(XMLConfig.this,ex.toString(), "Ошибка сохранения конфигурационного файла",JOptionPane.WARNING_MESSAGE ); } System.exit(0); } } // Сохранение состояния public void saveState(Document xdoc,Element xnode) { // Текст xnode.appendChild( xdoc.createTextNode( edit.getText() ) ); // Цвет текста Color color = edit.getForeground(); xnode.setAttribute( "color", Integer.toHexString(color.getRGB()) ); // Позиции окна Rectangle bounds = getBounds(); String sbounds = ""+bounds.x+' '+bounds.y+' '+bounds.width+' '+bounds.height; xnode.setAttribute( "bounds",sbounds ); } // Восстановление состояния public void restoreState(Element xnode) { // Позиции окна String sbounds = xnode.getAttribute("bounds"); StringTokenizer tok = new StringTokenizer(sbounds); int x = Integer.parseInt(tok.nextToken()); int y = Integer.parseInt(tok.nextToken()); int w = Integer.parseInt(tok.nextToken()); int h = Integer.parseInt(tok.nextToken()); setBounds(x,y,w,h); // Текст edit.setText( getNodeText(xnode) ); // Цвет текста String scolor = xnode.getAttribute("color"); Color color = new Color( (int)Long.parseLong(scolor,16),true ); edit.setForeground(color); box.setSelectedItem(color); } // Сборка текста узла public static String getNodeText(Element xnode) { NodeList xtexts = xnode.getChildNodes(); int n = xtexts.getLength(); StringBuffer text = new StringBuffer(); for( int i = 0; i