import java.awt.*;
import java.awt.event.*;
public class TestColorPalette{
private Frame frame ;
private Panel p;
TextField tfr,tfg,tfb;
Scrollbar sbr,sbg,sbb;
private int r = 255, g = 255, b = 255;
private Dialog alertDialog;
public static void main(String[] args){
new TestColorPalette().init();
}
private void init(){
MyMonitor mm = new MyMonitor();
frame = new Frame("调色板");
p = new Panel();
alertDialog = this.createAlertDialog();
p.setBackground(Color.white);
tfr = new TextField("255");
tfg = new TextField("255");
tfb = new TextField("255");
tfr.setName("tfr");
tfg.setName("tfg");
tfb.setName("tfb");
tfr.addTextListener(mm);
tfg.addTextListener(mm);
tfb.addTextListener(mm);
sbr = new Scrollbar(Scrollbar.HORIZONTAL,255,0,0,256);
sbg = new Scrollbar(Scrollbar.HORIZONTAL,255,0,0,256);
sbb = new Scrollbar(Scrollbar.HORIZONTAL,255,0,0,256);
sbr.setName("sbr");
sbg.setName("sbg");
sbb.setName("sbb");
sbr.setBackground(Color.red);
sbg.setBackground(Color.green);
sbb.setBackground(Color.blue);
sbr.addAdjustmentListener(mm);
sbg.addAdjustmentListener(mm);
sbb.addAdjustmentListener(mm);
Panel ptf = new Panel(new GridLayout(3,2));
ptf.add(new Label("红色"));
ptf.add(tfr);
ptf.add(new Label("绿色"));
ptf.add(tfg);
ptf.add(new Label("蓝色"));
ptf.add(tfb);
Panel psb = new Panel(new GridLayout(3,1));
psb.add(sbr);
psb.add(sbg);
psb.add(sbb);
Panel pcolor = new Panel(new BorderLayout());
pcolor.add(ptf,"West");
pcolor.add(psb,"Center");
frame.add(p,"Center");
frame.add(pcolor,"South");
frame.setBounds(400,400,400,300);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
frame.setVisible(false);
System.exit(0);
}
});
}
private Dialog createAlertDialog(){
Dialog d = new Dialog(frame,"错误",true);
Label note = new Label("输入出错");
Button submit = new Button("确定");
submit.addActionListener(this.new MyMonitor());
d.setLayout(new FlowLayout(FlowLayout.CENTER,50,20));
d.add(note);
d.add(submit);
d.setBounds(450,450,200,130);
d.setResizable(false);
d.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
alertDialog.setVisible(false);
}
});
return d;
}
//nested class MyMonitor
class MyMonitor implements TextListener,AdjustmentListener,ActionListener {
@Override
public void textValueChanged(TextEvent e){
TextField tf_temp = (TextField)e.getSource();
String tf_name = tf_temp.getName();
String num = tf_temp.getText();
//this.numCheck(tf_temp,num);
int value = 0 ;
value = this.numCheck(tf_temp, num);
if("tfr".equals(tf_name)){
r =value;
sbr.setValue(r);
}else if("tfg".equals(tf_name)){
g = value;
sbg.setValue(g);
}else if("tfb".equals(tf_name)){
b = value;
sbb.setValue(b);
}
this.refresh();
} @Override
public void adjustmentValueChanged(AdjustmentEvent e) {
Scrollbar sb_temp = (Scrollbar)e.getSource();
String sb_name = sb_temp.getName();
int sb_value = sb_temp.getValue();
if("sbr".equals(sb_name)){
r = sb_value;
tfr.setText(String.valueOf(r));
}else if("sbg".equals(sb_name)){
g = sb_value;
tfg.setText(String.valueOf(g));
}else if("sbb".equals(sb_name)){
b = sb_value;
tfb.setText(String.valueOf(b));
}
this.refresh();
}
@Override
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if("确定".equals(s)){
alertDialog.setVisible(false);
}
}
private void refresh() {
Color c = new Color(r,g,b);
p.setBackground(c);
}
private int numCheck(TextField tf_temp,String num) {
int i = 0;
while(num.matches("0+\\d+")){//去掉开头0
num = num.substring(1);
}
//num = num.replaceAll("^[0]+","");
try{
i = Integer.parseInt(num);
//tf_temp.setText(num);
if(i>255){ //这个最多只会发生一次不会发生死循环;
//tf_temp.setText(Integer.toString(255));
i = 255;
num = "255";
tf_temp.setText(num);
System.out.println(i);
}else {
tf_temp.setText(num); //死循环。setText触发了TextvalueChanged()调用numCheck()发现小于255,这个else又成立,这样死循环;
System.out.println(i);
}
//tf_temp.setText(num);
//System.out.println(num);
}catch(NumberFormatException e){
alertDialog.setVisible(true);
tf_temp.setText("255");
e.printStackTrace();
}
return i;
}
}}
import java.awt.event.*;
public class TestColorPalette{
private Frame frame ;
private Panel p;
TextField tfr,tfg,tfb;
Scrollbar sbr,sbg,sbb;
private int r = 255, g = 255, b = 255;
private Dialog alertDialog;
public static void main(String[] args){
new TestColorPalette().init();
}
private void init(){
MyMonitor mm = new MyMonitor();
frame = new Frame("调色板");
p = new Panel();
alertDialog = this.createAlertDialog();
p.setBackground(Color.white);
tfr = new TextField("255");
tfg = new TextField("255");
tfb = new TextField("255");
tfr.setName("tfr");
tfg.setName("tfg");
tfb.setName("tfb");
tfr.addTextListener(mm);
tfg.addTextListener(mm);
tfb.addTextListener(mm);
sbr = new Scrollbar(Scrollbar.HORIZONTAL,255,0,0,256);
sbg = new Scrollbar(Scrollbar.HORIZONTAL,255,0,0,256);
sbb = new Scrollbar(Scrollbar.HORIZONTAL,255,0,0,256);
sbr.setName("sbr");
sbg.setName("sbg");
sbb.setName("sbb");
sbr.setBackground(Color.red);
sbg.setBackground(Color.green);
sbb.setBackground(Color.blue);
sbr.addAdjustmentListener(mm);
sbg.addAdjustmentListener(mm);
sbb.addAdjustmentListener(mm);
Panel ptf = new Panel(new GridLayout(3,2));
ptf.add(new Label("红色"));
ptf.add(tfr);
ptf.add(new Label("绿色"));
ptf.add(tfg);
ptf.add(new Label("蓝色"));
ptf.add(tfb);
Panel psb = new Panel(new GridLayout(3,1));
psb.add(sbr);
psb.add(sbg);
psb.add(sbb);
Panel pcolor = new Panel(new BorderLayout());
pcolor.add(ptf,"West");
pcolor.add(psb,"Center");
frame.add(p,"Center");
frame.add(pcolor,"South");
frame.setBounds(400,400,400,300);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
frame.setVisible(false);
System.exit(0);
}
});
}
private Dialog createAlertDialog(){
Dialog d = new Dialog(frame,"错误",true);
Label note = new Label("输入出错");
Button submit = new Button("确定");
submit.addActionListener(this.new MyMonitor());
d.setLayout(new FlowLayout(FlowLayout.CENTER,50,20));
d.add(note);
d.add(submit);
d.setBounds(450,450,200,130);
d.setResizable(false);
d.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
alertDialog.setVisible(false);
}
});
return d;
}
//nested class MyMonitor
class MyMonitor implements TextListener,AdjustmentListener,ActionListener {
@Override
public void textValueChanged(TextEvent e){
TextField tf_temp = (TextField)e.getSource();
String tf_name = tf_temp.getName();
String num = tf_temp.getText();
//this.numCheck(tf_temp,num);
int value = 0 ;
value = this.numCheck(tf_temp, num);
if("tfr".equals(tf_name)){
r =value;
sbr.setValue(r);
}else if("tfg".equals(tf_name)){
g = value;
sbg.setValue(g);
}else if("tfb".equals(tf_name)){
b = value;
sbb.setValue(b);
}
this.refresh();
} @Override
public void adjustmentValueChanged(AdjustmentEvent e) {
Scrollbar sb_temp = (Scrollbar)e.getSource();
String sb_name = sb_temp.getName();
int sb_value = sb_temp.getValue();
if("sbr".equals(sb_name)){
r = sb_value;
tfr.setText(String.valueOf(r));
}else if("sbg".equals(sb_name)){
g = sb_value;
tfg.setText(String.valueOf(g));
}else if("sbb".equals(sb_name)){
b = sb_value;
tfb.setText(String.valueOf(b));
}
this.refresh();
}
@Override
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand();
if("确定".equals(s)){
alertDialog.setVisible(false);
}
}
private void refresh() {
Color c = new Color(r,g,b);
p.setBackground(c);
}
private int numCheck(TextField tf_temp,String num) {
int i = 0;
while(num.matches("0+\\d+")){//去掉开头0
num = num.substring(1);
}
//num = num.replaceAll("^[0]+","");
try{
i = Integer.parseInt(num);
//tf_temp.setText(num);
if(i>255){ //这个最多只会发生一次不会发生死循环;
//tf_temp.setText(Integer.toString(255));
i = 255;
num = "255";
tf_temp.setText(num);
System.out.println(i);
}else {
tf_temp.setText(num); //死循环。setText触发了TextvalueChanged()调用numCheck()发现小于255,这个else又成立,这样死循环;
System.out.println(i);
}
//tf_temp.setText(num);
//System.out.println(num);
}catch(NumberFormatException e){
alertDialog.setVisible(true);
tf_temp.setText("255");
e.printStackTrace();
}
return i;
}
}}
private int numCheck(TextField tf_temp, String num){
int i = 0;
while(num.startsWith("00")){
num = num.substring(1);
tf_temp.setText(num); //这句一定要加上,不然的话如果用户写的是00000while之后就只有一个0了,下面的if不成立,这样tf_temp显示不出来;
tf_temp.setSelectionStart(3);
System.out.println(num);
}
if(num.matches("0\\d+")){
num = num.substring(1);
///tf_temp.setSelectionStart(1);
tf_temp.setText(num);
tf_temp.setSelectionStart(1);
}
try{
i = Integer.parseInt(num);
if(i>255){
tf_temp.setText("255");
tf_temp.setSelectionStart(3);
return 255;
}else {
}
}catch(NumberFormatException e){
alertDialog.setVisible(true);
//e.printStackTrace();
tf_temp.setText("255");
tf_temp.setSelectionStart(3);
return 255;
}
return i;
}各位还有没有好的办法。