import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
public class TestColorChooser extends JFrame {
private JPanel jpl1111 = new JPanel();
private PanelForColorFrame pfcf = new PanelForColorFrame(jpl1111);
//private ColorSliderJPanel csjp = new ColorSliderJPanel(jpl1111);//持有对方引用,点名给它创建
private ColorJFrame cjf = new ColorJFrame();
private MyJMenuBar mjmb = new MyJMenuBar();
private static final int SCREENWIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
private static final int SCREENHEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
public static void main(String[] args) {
TestColorChooser tcc=new TestColorChooser();
}
TestColorChooser(){
super("未命名-画图");
setBounds(SCREENWIDTH/4,SCREENHEIGHT/4,SCREENWIDTH/2,SCREENHEIGHT/2+50);
add(jpl1111);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setJMenuBar(mjmb);
setVisible(true);
setResizable(true);
}
class MyJMenuBar extends JMenuBar implements ActionListener{
private JMenu jmFile = new JMenu("文件");
private JMenu jmEdit = new JMenu("编辑");
private JMenu jmColor = new JMenu("颜色");
private JMenuItem jmiOpen = new JMenuItem("打开");
private JMenuItem jmiNew = new JMenuItem("新建");
private JMenuItem jmiSave = new JMenuItem("保存");
private JMenuItem jmiExit = new JMenuItem("退出");
private JMenuItem jmiCut = new JMenuItem("剪贴");
private JMenuItem jmiCopy = new JMenuItem("复制");
private JMenuItem jmiPaste = new JMenuItem("粘贴");
private JMenuItem jmiEditColor = new JMenuItem("编辑颜色...");
MyJMenuBar(){
jmFile.add(jmiOpen);
jmFile.add(jmiNew);
jmFile.add(jmiSave);
jmFile.add(jmiExit);
jmEdit.add(jmiCut);
jmEdit.add(jmiCopy);
jmEdit.add(jmiPaste);
jmColor.add(jmiEditColor);
add(jmFile);
add(jmEdit);
add(jmColor);
jmiEditColor.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jmiEditColor) {
cjf.setVisible(true);
}
}
}
//
class ColorJFrame extends JFrame {//用到了布局
private JPanel jplfnorth = new JPanel();
private JPanel jplfsouth = new JPanel();
private JPanel jprgnorth = new JPanel();
private JPanel jprgsouth = new JPanel();
private int i;
private int j;
private Graphics g3d = null;
//private JPanel jp221 = new JPanel();
private JPanel leftPanel = new JPanel();
private JButton jb1 = new JButton("规定自定义颜色");
private JPanel rightPanel = new JPanel();
private Boolean isBig = false;
private Color myGray = new Color(222,218,199);
//烧饼,看清楚,ColorSliderJPanel构造点的名是个JPanel不是ColorJFrame
//这个类已经是主类的内部类,已经对jpl1111有访问特权,所以已经能构造这个以
//jpl1111为实参的颜色面板。
private ColorSliderJPanel csjp = new ColorSliderJPanel(jpl1111);
ColorJFrame(){
super("编辑颜色");
setBounds(200,200,220,310);
//对整体的布局
setLayout(new GridLayout(1,2,0,5));
leftPanel.setLayout(new BorderLayout());//jp2进行了borderlayout布局也就是东西南北中的面板布局
jplfnorth.setLayout(new GridLayout(1,3,5,5));//对jp3进行了网格布局一行三列间隔为5的布局
jplfnorth.add(new JLabel("基本颜色:"));
rightPanel.setLayout(new BorderLayout());
jprgnorth.setLayout(new GridLayout(1,3,5,5));
jprgnorth.add(new JLabel("自定义颜色:"));
rightPanel.add(csjp);
leftPanel.add(jplfnorth,BorderLayout.NORTH);
leftPanel.add(pfcf,BorderLayout.CENTER);//内部类的访问特权
leftPanel.add(jplfsouth,BorderLayout.SOUTH);
rightPanel.add(jprgnorth,BorderLayout.NORTH);
jplfsouth.add(jb1);
add(leftPanel);
jb1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(isBig) {
remove(rightPanel);
setSize(220,310);
repaint();
isBig = false;
} else {
add(rightPanel);
setSize(440,310);
repaint();
isBig = true;
}
}
});
setResizable(false);
}
}
}
class PanelForColorFrame extends JPanel implements MouseListener {
private JPanel jcp ;
private final int w =155;
private final int h =85;
private int xMode;
private int yMode;
private Color[] c = new Color[64];
PanelForColorFrame(JPanel jcp) {//持有父类
this.jcp = jcp;
addMouseListener(this);
}
@Override
public void paint(Graphics g) {
super.paint(g);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
c[16 * i + 4 * j + k] = new Color(70 * i, 70 * j,70 * k);
}
}
}
for(int i=0;i<8;i++){
for(int j=0;j<6;j++){
g.setColor(c[8 * i + j]);
g.fill3DRect(i*25+10,j*20+10,20,15,true);
}
}
}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
if ((e.getX() >= 10) && (e.getX() <= 30)) {
xMode = 0;
} else if ((e.getX() >= 35) && (e.getX() <= 55)) {
xMode = 1;
} else if ((e.getX() >= 60) && (e.getX() <= 80)) {
xMode = 2;
} else if ((e.getX() >= 85) && (e.getX() <= 105)) {
xMode = 3;
} else if ((e.getX() >= 110) && (e.getX() <= 130)) {
xMode = 4;
} else if ((e.getX() >= 135) && (e.getX() <= 155)) {
xMode = 5;
} else if ((e.getX() >= 160) && (e.getX() <= 180)) {
xMode = 6;
} else if ((e.getX() >= 185) && (e.getX() <= 205)) {
xMode = 7;
} else {
xMode = 10;
}
if ((e.getY() >= 10) && (e.getY() <= 25)) {
yMode = 0;
} else if ((e.getY() >= 30) && (e.getY() <= 45)) {
yMode = 1;
} else if ((e.getY() >= 50) && (e.getY() <= 65)) {
yMode = 2;
} else if ((e.getY() >= 70) && (e.getY() <= 85)) {
yMode = 3;
} else if ((e.getY() >= 90) && (e.getY() <= 105)) {
yMode = 4;
} else if ((e.getY() >= 110) && (e.getY() <= 125)) {
yMode = 5;
} else {
yMode = 10;
}
if ((xMode != 10) && (yMode != 10))
jcp.setBackground(c[8*xMode+yMode]);
}
}
class ColorSliderJPanel extends JPanel{
private JPanel jcp = null;
private JSlider rSlider = new JSlider(0,255);
private JSlider gSlider = new JSlider(0,255);
private JSlider bSlider = new JSlider(0,255);
private Integer rValue = 127,gValue = 127,bValue = 127;
private JPanel previewJP = new JPanel();
private JPanel sliderJP = new JPanel();
private JPanel buttonJP = new JPanel();
private JPanel sljpWest = new JPanel();
private JPanel sljpCenter = new JPanel();
private JPanel sljpEast = new JPanel();
private JTextField rjtf = new JTextField(3);
private JTextField gjtf = new JTextField(3);
private JTextField bjtf = new JTextField(3);
private Color jtaBgColor = new Color(127,127,127);
private JButton jbOK = new JButton("确定");
private JButton jbNO = new JButton("取消");
ColorSliderJPanel(final JPanel jcp){
this.jcp = jcp;
setLayout(new GridLayout(3,1));
add(previewJP);
add(sliderJP);
add(buttonJP);
previewJP.setBorder(new TitledBorder("预览"));
sliderJP.setLayout(new BorderLayout());
sliderJP.setBorder(new TitledBorder("调色板"));
sljpWest.setLayout(new GridLayout(3,1));
sljpWest.add(new JLabel("红色:"));
sljpWest.add(new JLabel("绿色:"));
sljpWest.add(new JLabel("蓝色:"));
sljpCenter.setLayout(new GridLayout(3,1));
sliderJP.add(sljpWest,BorderLayout.WEST);
sliderJP.add(sljpCenter,BorderLayout.CENTER);
sliderJP.add(sljpEast,BorderLayout.EAST);
sljpEast.setLayout(new GridLayout(3,1));
sljpEast.add(rjtf);
sljpEast.add(gjtf);
sljpEast.add(bjtf);
buttonJP.setLayout(new GridLayout(2,1));
buttonJP.add(jbOK);
buttonJP.add(jbNO);
jbOK.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
jcp.setBackground(jtaBgColor);
}
});
jbNO.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
rSlider.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
rValue = rSlider.getValue();
rjtf.setText(rValue.toString());
jtaBgColor = new Color(rValue,gValue,bValue);
previewJP.setBackground(jtaBgColor);
}
});
gSlider.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
gValue = gSlider.getValue();
gjtf.setText(gValue.toString());
jtaBgColor = new Color(rValue,gValue,bValue);
previewJP.setBackground(jtaBgColor);
}
});
bSlider.addChangeListener(new ChangeListener(){
public void stateChanged(ChangeEvent e){
bValue = bSlider.getValue();
bjtf.setText(bValue.toString());
jtaBgColor = new Color(rValue,gValue,bValue);
previewJP.setBackground(jtaBgColor);
}
});
sljpCenter.add(rSlider);
sljpCenter.add(gSlider);
sljpCenter.add(bSlider);
}
}