Now my skeleton is sitting before my computer and my ghost is typing
this message ...
1. I can't run dxviewer compiled by myself...
2. Teaching myself graphics and need some help
Below is a small app I wrote to teach myself how to use custom painting.
Could someone take a look and give me some pointers on how I built it.
I'm not sure if I have this right, it seems to break down after 4 or 5
times.
Opens with a small blank frame and user then select to add buttons, once
buttons are visible the user can modify shape and color, or change the
number of buttons.
Thanks
Jim
/*
* TestGraphics.java
*
*
*/
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.geom.*;
import java.awt.FlowLayout;
import java.util.Random;
public class TestGraphics extends javax.swing.JFrame {
private GraphicsPanel graphicsPanel;
private static final JColorChooser colorChooser = new
javax.swing.JColorChooser();
/** Creates new form TestGraphics */
public TestGraphics () {
initComponents ();
graphicsPanel = new GraphicsPanel();
getContentPane().add(graphicsPanel, "Center");
setSize(500, 400 );
}
/** 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 FormEditor.
*/
private void initComponents () {
jPanel1 = new javax.swing.JPanel ();
addButtonsButton = new javax.swing.JButton ();
changeShapeButton = new javax.swing.JButton ();
changeColorButton = new javax.swing.JButton ();
addWindowListener (new java.awt.event.WindowAdapter () {
public void windowClosing (java.awt.event.WindowEvent evt) {
exitForm (evt);
}
}
);
addButtonsButton.setText ("# of buttons");
addButtonsButton.addActionListener (new java.awt.event.ActionListener
() {
public void actionPerformed (java.awt.event.ActionEvent evt) {
addButtonsButtonActionPerformed (evt);
}
}
);
jPanel1.add (addButtonsButton);
changeShapeButton.setText ("Shape");
changeShapeButton.addActionListener (new java.awt.event.ActionListener
() {
public void actionPerformed (java.awt.event.ActionEvent evt) {
changeShapeButtonActionPerformed (evt);
}
}
);
jPanel1.add (changeShapeButton);
changeColorButton.setText ("Color");
changeColorButton.addActionListener (new java.awt.event.ActionListener
() {
public void actionPerformed (java.awt.event.ActionEvent evt) {
changeColorButtonActionPerformed (evt);
}
}
);
jPanel1.add (changeColorButton);
getContentPane ().add (jPanel1, java.awt.BorderLayout.NORTH);
}
private void addButtonsButtonActionPerformed (java.awt.event.ActionEvent
evt) {
Random r = new Random();
int number = r.nextInt( 4 ) + 1;
if( graphicsPanel.getComponentCount() != 0)
graphicsPanel.removeAll();
graphicsPanel.validate();
graphicsPanel.setNumber(number);
graphicsPanel.createTextPanes();
}
private void changeColorButtonActionPerformed (java.awt.event.ActionEvent
evt) {
java.awt.Color c = colorChooser.showDialog (this, "",
java.awt.Color.lightGray);
graphicsPanel.setColor (c);
}
private void changeShapeButtonActionPerformed (java.awt.event.ActionEvent
evt) {
if( graphicsPanel.getShape().equals("circle"))
graphicsPanel.setShape("square");
else
graphicsPanel.setShape("circle");
}
/** 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 TestGraphics ().show ();
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JButton addButtonsButton;
private javax.swing.JButton changeShapeButton;
private javax.swing.JButton changeColorButton;
// End of variables declaration
}
class GraphicsPanel extends javax.swing.JPanel{
private String shape ="square";
private java.awt.Color color;
private JTextPane[] pane;
private int number;
SimpleAttributeSet set;
StyledDocument doc;
public GraphicsPanel(){
set = new SimpleAttributeSet();
color = java.awt.Color.red;
//setOpaque(false);
setBackground( java.awt.Color.blue);
setLayout(new FlowLayout());
}
public void setNumber(int number){
this.number = number;
}
public void setShape(String shape){
this.shape = shape;
repaint();
}
public String getShape(){
return shape;
}
public void setColor( java.awt.Color color ){
this.color = color;
repaint();
}
public void createTextPanes(){
if(number != 0){
pane = new JTextPane[number];
for(int i = 0; i < pane.length; i++){
try{
pane[i] = new javax.swing.JTextPane();
pane[i].setOpaque(false);
pane[i].setPreferredSize(new java.awt.Dimension(200, 100));
StyleConstants.setAlignment(set, StyleConstants.ALIGN_CENTER );
StyleConstants.setForeground(set, java.awt.Color.white);
StyleConstants.setFontFamily(set, "Arial");
StyleConstants.setFontSize(set, 28);
doc = pane[i].getStyledDocument ();
pane[i].setParagraphAttributes (set, true);
doc.insertString(doc.getLength(),"Button"+String.valueOf(i+1),
set);
add(pane[i]);
System.out.println("adding pane "+i);
}catch(Exception e){e.printStackTrace();}
}
validate();
}
}
public void paintComponent(java.awt.Graphics g ){
super.paintComponent(g);
java.awt.Graphics2D g2 = (java.awt.Graphics2D)g;
g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
g2.setRenderingHint( RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY );
g2.setRenderingHint( RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_QUALITY);
java.awt.Component[] comp = getComponents();
for( int i = 0; i<comp.length; i++){
System.out.println("drawing "+comp[i].getBounds() );
if( shape.equals ("square")){
g2.setStroke(new java.awt.BasicStroke(1.0f));
g2.setColor(color);
g2.fillRoundRect(comp[i].getX(), comp[i].getY(),
comp[i].getWidth(),
comp[i].getHeight(),30,30 );
g2.setStroke(new java.awt.BasicStroke(3.0f));
g2.setColor(color.darker());
g2.drawRoundRect(comp[i].getX(), comp[i].getY(),
comp[i].getWidth()-1,
comp[i].getHeight()-1,30,30 );
}
else{
g2.setStroke(new java.awt.BasicStroke(1.0f));
g2.setColor(color);
g2.fillOval(comp[i].getX(),comp[i].getY(),
comp[i].getWidth(), comp[i].getHeight());
g2.setStroke(new java.awt.BasicStroke(3.0f));
g2.setColor(color.darker());
g2.drawOval(comp[i].getX(), comp[i].getY(),
comp[i].getWidth()-1, comp[i].getHeight()-1);
}
}
g2.dispose();
}
}
5. The yellow and black dotted line of death
6. There ain't NO SUCH THING AS DEATH
8. Mayan Birth/Death mask in AI/PSD format ?
Anyone know of either an AI or PSD floating around ?