62,623
社区成员
发帖
与我相关
我的任务
分享import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class Painter2 extends JFrame {
private int topX, topY, width, fontSize, height, bottomX, bottomY, shape;
private boolean clear, textOn, filled;
private Color drawingColor;
private String font;
private JTextField text;
private JPanel panel1, panel2, panel3;
private JRadioButton ovalBox, rectBox, lineBox;
private ButtonGroup shapeGroup;
private JCheckBox fillBox;
private JComboBox colorList, fontList, sizeList;
private JButton clearButton;
private String colorNames[] = { "Black", "Green", "Blue", "Red", "Cyan" };
private Color colors[] = { Color.black, Color.green, Color.blue, Color.red,
Color.cyan };
private String fontNames[] = { "Serif", "SansSerif", "Monospaced"
};
private String szieNames[] = { "9", "10", "22", "72" };
private int sizes[] = { 9, 10, 22, 72 };
private final int OVAL = 1, LINE = 2, RECT = 3;
private ToolWindow tools;
public Painter2() {
addMouseListener(new MouseHandler());
drawingColor = Color.black;
shape = OVAL;
font = "Serif";
fontSize = 9;
setSize(300, 300);
setVisible(true);
tools = new ToolWindow();
}
public void paint(Graphics g) {
g.setColor(drawingColor);
if (textOn) {
g.setFont(new Font(font, Font.PLAIN, fontSize));
g.drawString(text.getText(), topX, topY);
textOn = false;
return;
}
if (shape != LINE) {
topX = Math.min(topX, bottomX);
topY = Math.min(topY, bottomY);
}
if (filled && shape != LINE)
switch (shape) {
case OVAL:
g.fillOval(topX, topY, width, height);
break;
case RECT:
g.fillRect(topX, topY, width, height);
break;
}
else
switch (shape) {
case OVAL:
g.drawOval(topX, topY, width, height);
break;
case LINE:
g.drawLine(topX, topY, width, height);
break;
case RECT:
g.drawRect(topX, topY, width, height);
break;
}
if (clear == true) {
g.setColor(Color.white);
g.fillRect(0, 0, getSize().width, getSize().height);
clear = false;
}
}
private class ToolWindow extends JFrame {
public ToolWindow() {
text = new JTextField("Text", 20);
text.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
textOn = true;
repaint();
}
}
);
fontList = new JComboBox(fontNames);
fontList.setMaximumRowCount(3);
fontList.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
font = fontNames[fontList.getSelectedIndex()];
}
}
);
sizeList = new JComboBox(szieNames);
sizeList.setMaximumRowCount(3);
sizeList.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
font = fontNames[sizeList.getSelectedIndex()];
}
}
);
colorList = new JComboBox(colorNames);
colorList.setMaximumRowCount(3);
colorList.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
drawingColor = colors[colorList.getSelectedIndex()];
}
});
clearButton = new JButton("Clear");
clearButton.addActionListener(new ClearButtonHandler());
fillBox = new JCheckBox("filled");
FillBoxHandler fillHandle = new FillBoxHandler();
fillBox.addItemListener(fillHandle);
ovalBox = new JRadioButton("Oval", true);
lineBox = new JRadioButton("Line", false);
rectBox = new JRadioButton("Rectangle", false);
RadioButtonHandler handler = new RadioButtonHandler();
ovalBox.addItemListener(handler);
lineBox.addItemListener(handler);
rectBox.addItemListener(handler);
shapeGroup = new ButtonGroup();
shapeGroup.add(ovalBox);
shapeGroup.add(lineBox);
shapeGroup.add(rectBox);
panel1 = new JPanel();
panel2 = new JPanel();
panel3 = new JPanel();
panel1.setLayout(new GridLayout(1, 3));
panel2.setLayout(new GridLayout(1, 2));
panel3.setLayout(new GridLayout(1, 3));
panel1.add(ovalBox);
panel1.add(lineBox);
panel2.add(fillBox);
panel2.add(clearButton);
panel3.add(new JScrollPane(colorList));
panel3.add(new JScrollPane(fontList));
panel3.add(new JScrollPane(sizeList));
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(panel1);
container.add(panel2);
container.add(panel3);
container.add(text);
setSize(350, 200);
setLocation(300, 0);
setVisible(true);
}
}
private class MouseHandler extends MouseAdapter {
public void mousePressed(MouseEvent event) {
topX = event.getX();
topY = event.getY();
}
public void mouseReleased(MouseEvent event) {
bottomX = event.getX();
bottomY = event.getY();
width = Math.abs(topX - bottomX);
height = Math.abs(topY - bottomY);
repaint();
}
}
private class ClearButtonHandlera implements ActionListener {
public void actionPerformed(ActionEvent event) {
clear = true;
repaint();
}
}
private class RadioButtonHandler implements ItemListener {
public void itemStateChanged(ItemEvent event) {
if (event.getSource() == ovalBox)
shape = OVAL;
else if (event.getSource() == lineBox)
shape = LINE;
if (event.getSource() == rectBox)
shape = RECT;
}
}
private class FillBoxHander implements ItemListener {
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED)
filled = true;
else
filled = false;
}
}
public static void main(String arg[]) {
Painter2 application = new Painter2();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}