私は Java を学ぼうとしていますが、OOP を理解するのに苦労しています。シンプルな Java ペイント アプレットを作成しようとしています。現在、描画する背景画像、カラーセレクター、幅セレクターがあります。http://www.javakode.com/applets/08-painting/にある brush1.java の例をインポートしようとしています。
これまでの私の既存のコードは次のとおりです。
package imagetest;
import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class ImageTest {
public static JList colorJList; // list to display colors
private static final String[] colorNames = { "Black", "Blue", "Cyan",
"Dark Gray", "Gray", "Green", "Light Gray", "Magenta",
"Orange", "Pink", "Red", "White", "Yellow" };
public static final Color[] colors = { Color.BLACK, Color.BLUE,
Color.CYAN, Color.DARK_GRAY, Color.GRAY, Color.GREEN,
Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK,
Color.RED, Color.WHITE, Color.YELLOW };
public static JList widthJList; // list to display colors
private static final String[] widthNames = { "Thin", "Small", "Medium","Large" };
public static final int[] widths = { 2,4,6,10 };
public static ImagePanel panel;
public static void main(String[] args) {
panel = new ImagePanel(new ImageIcon("willy.jpg").getImage());
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
colorJList = new JList( colorNames ); // create with colorNames
colorJList.setVisibleRowCount( 5 ); // display five rows at once
// do not allow multiple selections
colorJList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
// add a JScrollPane containing JList to frame
frame.add( new JScrollPane( colorJList ) );
colorJList.setSelectedIndex(0);
colorJList.addListSelectionListener(
new ListSelectionListener() // anonymous inner class
{
// handle list selection events
public void valueChanged( ListSelectionEvent event )
{
panel.repaint();
} // end method valueChanged
} // end anonymous inner class
);
widthJList = new JList( widthNames ); // create with colorNames
widthJList.setVisibleRowCount( 4 ); // display five rows at once
// do not allow multiple selections
widthJList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
// add a JScrollPane containing JList to frame
frame.add( new JScrollPane( widthJList ) );
widthJList.setSelectedIndex(0);
widthJList.addListSelectionListener(
new ListSelectionListener() // anonymous inner class
{
// handle list selection events
public void valueChanged( ListSelectionEvent event )
{
panel.repaint();
} // end method valueChanged
} // end anonymous inner class
);
frame.getContentPane().setBackground(Color.LIGHT_GRAY );
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
class ImagePanel extends JPanel {
private Image img;
public Color color = Color.BLACK;
public int linewidth = 2;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
color = ImageTest.colors[ ImageTest.colorJList.getSelectedIndex()];
linewidth = ImageTest.widths[ ImageTest.widthJList.getSelectedIndex()];
g.setColor(color);
for(int i = 0; i < 10; i++)
{
g.drawLine(10+i*10,10+i*10,50+i*10,50+i*10);
}
}
}
私はオブジェクト指向プログラミングに本当に苦労しています。私はそれをまったく理解していません。それは私には当てはまりません。私はまだ、ダミーが学習できる赤ちゃんのステップに分解するリソースを探しています. では、練習用アプレットの残りの部分にブラシを実装するにはどうすればよいでしょうか?