实现好的算法

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);
   
  }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值