本人想在窗体设计四个说明颜色的复选框,点击后,面板绘画出相应颜色的字体,可是测试时点击没反应,请各位高手指点一下.
代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class FontColor extends JFrame {
Pane p=new Pane();
JCheckBox Red=new JCheckBox("红色");
JCheckBox Green=new JCheckBox("绿色");
JCheckBox Blue=new JCheckBox("蓝色");
JCheckBox Gray=new JCheckBox("灰色");
GridLayout gridLayout2 = new GridLayout();
static char c;
public FontColor() {
JPanel c=(JPanel) this.getContentPane(); try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
c.add(p);
} private void jbInit() throws Exception {
p.setLayout(gridLayout2);
gridLayout2.setColumns(1);
gridLayout2.setRows(4);
Red.addItemListener(new MyItemListener());
Green.addItemListener(new MyItemListener());
Blue.addItemListener(new MyItemListener());
Gray.addItemListener(new MyItemListener());
this.setCursor(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Red.addActionListener(new FontColor_Red_actionAdapter(this));
p.add(Red);
p.add(Green);
p.add(Blue);
p.add(Gray);
}
public class MyItemListener implements ItemListener{
public void itemStateChanged(ItemEvent ie){
if(ie.getItem().equals(Red)){
c='r';
p.repaint();
}
if(ie.getItem().equals(Green)){
c='g';
p.repaint();
}
if(ie.getItem().equals(Blue)){
c='b';
p.repaint();
}
if(ie.getItem().equals(Gray)){
c='a';
p.repaint();
}
}}
public class Pane extends JPanel{
public Pane(){ }public void paintComponent(Graphics g){
Font f=new Font("Georgia",Font.PLAIN ,40);
FontMetrics fm=getFontMetrics(f);
String s; switch(c){
case 'r':
s="红色";
g.setColor(Color.red );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'g':
s="绿色";
g.setColor(Color.green );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'b':
s="蓝色";
g.setColor(Color.blue );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'a':
s="灰色";
g.setColor(Color.gray );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break; }
}
}
public static void main(String args[]){
FontColor fc=new FontColor();
fc.setSize(600,400);
fc.show();
}
}
代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class FontColor extends JFrame {
Pane p=new Pane();
JCheckBox Red=new JCheckBox("红色");
JCheckBox Green=new JCheckBox("绿色");
JCheckBox Blue=new JCheckBox("蓝色");
JCheckBox Gray=new JCheckBox("灰色");
GridLayout gridLayout2 = new GridLayout();
static char c;
public FontColor() {
JPanel c=(JPanel) this.getContentPane(); try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
c.add(p);
} private void jbInit() throws Exception {
p.setLayout(gridLayout2);
gridLayout2.setColumns(1);
gridLayout2.setRows(4);
Red.addItemListener(new MyItemListener());
Green.addItemListener(new MyItemListener());
Blue.addItemListener(new MyItemListener());
Gray.addItemListener(new MyItemListener());
this.setCursor(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Red.addActionListener(new FontColor_Red_actionAdapter(this));
p.add(Red);
p.add(Green);
p.add(Blue);
p.add(Gray);
}
public class MyItemListener implements ItemListener{
public void itemStateChanged(ItemEvent ie){
if(ie.getItem().equals(Red)){
c='r';
p.repaint();
}
if(ie.getItem().equals(Green)){
c='g';
p.repaint();
}
if(ie.getItem().equals(Blue)){
c='b';
p.repaint();
}
if(ie.getItem().equals(Gray)){
c='a';
p.repaint();
}
}}
public class Pane extends JPanel{
public Pane(){ }public void paintComponent(Graphics g){
Font f=new Font("Georgia",Font.PLAIN ,40);
FontMetrics fm=getFontMetrics(f);
String s; switch(c){
case 'r':
s="红色";
g.setColor(Color.red );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'g':
s="绿色";
g.setColor(Color.green );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'b':
s="蓝色";
g.setColor(Color.blue );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'a':
s="灰色";
g.setColor(Color.gray );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break; }
}
}
public static void main(String args[]){
FontColor fc=new FontColor();
fc.setSize(600,400);
fc.show();
}
}
解决方案 »
- the static method cannot hide instance method from object
- preparedStatement 是驱动问题么?
- jdbc for DB2是免费的吗?
- 如何把java文件做成exe文件
- 请问多线程异常问题
- 请教各位大侠:如何用java监控ftp服务器的特定文件夹是否有新文件上传??
- 高分求救二进制文件读写问题
- 为啥找不到符号?我是新手,呵呵呵
- 哪有jdk源代码下载?版本尽量高点,1.4以上最好!
- 请问用什么工具能调试applet?
- 下面的程序代码是一个同步打枪的实例,子弹的容量是12粒,使用程序来模拟对枪膛的压入和射出操作。请问下面的代码,那里出现问题,然后怎样解决?
- 操作xml文件问题
public void itemStateChanged(ItemEvent ie){
if(ie.getItem().equals(Red)){
c= 'r ';
p.repaint();
}
if(ie.getItem().equals(Green)){
c= 'g ';
p.repaint();
}
if(ie.getItem().equals(Blue)){
c= 'b ';
p.repaint();
}
if(ie.getItem().equals(Gray)){
c= 'a ';
p.repaint();
}
}
改为如下形式
if(ie.getItem().equals("Red"));...下同
你应该匹配字符串
private void jbInit() throws Exception {
//p.setLayout(gridLayout2); //去掉这句看看吧.
gridLayout2.setColumns(1);
gridLayout2.setRows(4);
Red.addItemListener(new MyItemListener());
Green.addItemListener(new MyItemListener());
Blue.addItemListener(new MyItemListener());
Gray.addItemListener(new MyItemListener());
this.setCursor(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Red.addActionListener(new FontColor_Red_actionAdapter(this));
p.add(Red);
p.add(Green);
p.add(Blue);
p.add(Gray);
}
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
public class FontColor extends JFrame {
Pane p=new Pane();
JCheckBox Red=new JCheckBox("红色");
JCheckBox Green=new JCheckBox("绿色");
JCheckBox Blue=new JCheckBox("蓝色");
JCheckBox Gray=new JCheckBox("灰色");
GridLayout gridLayout2 = new GridLayout();
static char c;
public FontColor() {
JPanel c=(JPanel) this.getContentPane(); try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
c.add(p);
} private void jbInit() throws Exception {
//p.setLayout(gridLayout2);
gridLayout2.setColumns(1);
gridLayout2.setRows(4);
Red.addItemListener(new MyItemListener());
Green.addItemListener(new MyItemListener());
Blue.addItemListener(new MyItemListener());
Gray.addItemListener(new MyItemListener());
this.setCursor(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
//Red.addActionListener(new FontColor_Red_actionAdapter(this));
p.add(Red);
p.add(Green);
p.add(Blue);
p.add(Gray);
}
public class MyItemListener implements ItemListener{
public void itemStateChanged(ItemEvent ie){
if(ie.getItem().equals(Red)){
c= 'r';
p.repaint();
}
if(ie.getItem().equals(Green)){
c= 'g';
p.repaint();
}
if(ie.getItem().equals(Blue)){
c= 'b';
p.repaint();
}
if(ie.getItem().equals(Gray)){
c= 'a';
p.repaint();
}
} }
public class Pane extends JPanel{
public Pane(){ } public void paintComponent(Graphics g){
Font f=new Font("宋体",Font.PLAIN ,40);
FontMetrics fm=getFontMetrics(f);
String s; switch(c){
case 'r':
s="红色";
g.setColor(Color.red );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'g':
s="绿色";
g.setColor(Color.green );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'b':
s="蓝色";
g.setColor(Color.blue );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break;
case 'a':
s="灰色";
g.setColor(Color.gray );
g.setFont(f); //更改了字体后,g要重新设置字体***
g.clearRect(0,0,1000,1000);
g.drawString(s,(getSize().width -fm.stringWidth(s))/2,getHeight()/2);
break; }
}
}
public static void main(String args[]){
FontColor fc=new FontColor();
fc.setSize(600,400);
fc.show();
}
}
Font f=new Font("宋体",Font.PLAIN ,40); //把你代码中的那个地方改成这个
Checkbox box=(Checkbox)e.getItemSelectable();
if(box==red)
和
if(e.getItem().equals("红色"));
都可以啊。
但是if(e.getItem().equals(Red));也可以么?为什么?
你说了box==red,这个equals方法里第一行应该是这样的判断的if(this==obj)
{
return true;
}if(e.getItem().equals("红色")); 你说的这可以???/你试过没有啊.,我试的怎么不行呢???全是false,人家返回的全是JCheckbox 对像,你拿过String去比较,难道JCheckbox 在覆盖equals()方法的会拿对像的标题去判断是否相同吗?
public boolean equals(Object obj)
{
//....
if(obj instanceof String)
{
if(this.getText().equals(obj))
{
return true;
}
}
//.......
}应该不会这样的吧
import java.awt.*;
import java.awt.event.*;
public class Test extends Frame implements ItemListener
{
Checkbox red;
Checkbox blue;
Test()
{
red=new Checkbox("红色");
blue=new Checkbox("蓝色");
red.addItemListener(this);
blue.addItemListener(this);
add(red,BorderLayout.NORTH);
add(blue,BorderLayout.SOUTH);
setBounds(200,200,100,100);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}});
setVisible(true);
validate(); }
public void itemStateChanged(ItemEvent e)
{
//if ((Checkbox)e.getItemSeletable()==red)
if(e.getItem().equals("红色"))
{
System.out.println("你点了红色");
}
if(e.getItem().equals("蓝色"))
{
System.out.println("你点了蓝色");
}
}
public static void main(String args[])
{
new Test();
}
}