一个简单的JAVA问题

importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JLabel;importjava... import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class text {
public static void main(String args[]){
JFrame a = new JFrame("");
JPanel b = new JPanel();
JLabel c = new JLabel("Test area");
JLabel e = new JLabel("Status Bar");
b.setLayout(new GridLayout(2,1));
b.add(c);b.add(e);a.add(b);
click d = new click();
c.addMouseListener(d);
a.setSize(100,80);a.setVisible(true);}}

class click implements MouseListener{
public void mousePressed (MouseEvent e){
((JLabel)e.getSource()).setText("按下");}
public void mouseExited (MouseEvent e){
((JLabel)e.getSource()).setText("离开");}
public void mouseEntered (MouseEvent e){
((JLabel)e.getSource()).setText("进入");}
public void mouseReleased (MouseEvent e){
((JLabel)e.getSource()).setText("抬起");}
public void mouseClicked (MouseEvent e){
((JLabel)e.getSource()).setText("击完");}}
请问一下,为什么我想在状态栏Status Bar上显示,却在第一个测试区域Test area上面显示了,请问怎么改呢?
能不能不要内部类,我想要两个类~
两个类的那个Click d = new Click(this);这句通不过!
我晕了,你这个还是不行啊,晕了,又变成了在状态栏兼职测试区域了,上面的测试区都没用了!!
I服了YOU!,不行啊,您真测过吗???!!!
展开
 我来答
daay1986
2009-09-25 · TA获得超过6018个赞
知道大有可为答主
回答量:2208
采纳率:0%
帮助的人:1476万
展开全部
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class TestFrame {

public static void main(String args[]) {
JFrame a = new JFrame("");
JPanel b = new JPanel();
b.setLayout(new BorderLayout());
JLabel c = new JLabel("Test area");
final JLabel barLabel = new JLabel("Status Bar");
b.add(c);
a.getContentPane().add(barLabel, BorderLayout.SOUTH);
a.getContentPane().add(b, BorderLayout.CENTER);
b.addMouseListener(new MouseListener() {

public void mousePressed(MouseEvent e) {
barLabel.setText("按下");
}

public void mouseExited(MouseEvent e) {
barLabel.setText("离开");
}

public void mouseEntered(MouseEvent e) {
barLabel.setText("进入");
}

public void mouseReleased(MouseEvent e) {
barLabel.setText("抬起");
}

public void mouseClicked(MouseEvent e) {
barLabel.setText("击完");
}
});
a.setSize(100, 80);
a.setVisible(true);
}
}
1:监听改成内部类了。
2:你的布局不对,你可以把你的窗体最大化,状态栏就和上面部分一样大了,这个肯定不对,那么大的状态栏看了都别扭。使用BorderLayout应该就可以了。

尽量使用内部类把,你这种处理完全可以使用内部类,如果内部类会了外部类就自然明白了。
百度网友48a9e1a
2009-09-16 · 超过13用户采纳过TA的回答
知道答主
回答量:99
采纳率:100%
帮助的人:51.9万
展开全部
因为你用c.addMouseListener(d);即Test area作为源组件注册了监听对象,改成e.addMouseListener(d);就行了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jessiejacky
2009-09-21 · TA获得超过227个赞
知道答主
回答量:107
采纳率:0%
帮助的人:0
展开全部
你MouseListener加在Test Area上,再这样 ((JLabel)e.getSource()).setText("进入");
当然是显示在Text Area上了。
不知道你的思路是不是点击Test Area然后在status bar上显示,如果是的话,最方便的是用匿名内部类
JFrame a = new JFrame("");
JPanel b = new JPanel();
JLabel c = new JLabel("Test area");
//这里必须是final
final JLabel status = new JLabel("Status Bar");
b.setLayout(new GridLayout(2,1));
b.add(c);b.add(status);a.add(b);

c.addMouseListener(new MouseListener(){public void mousePressed (MouseEvent e){
status.setText("按下");}
public void mouseExited (MouseEvent e){
status.setText("离开");}
public void mouseEntered (MouseEvent e){
status.setText("进入");}
public void mouseReleased (MouseEvent e){
status).setText("抬起");}
public void mouseClicked (MouseEvent e){
status.setText("击完");}}
});
a.setSize(100,80);a.setVisible(true);}}

两个类的话,要这样了
public class test {
public JLabel status = new JLabel("Status Bar");
public Click d;
public test(){
d = new Click(this);
}
public static void main(String args[]) {
test t = new test();
JFrame a = new JFrame("");
JPanel b = new JPanel();
JLabel c = new JLabel("Test area");
// 这里必须是final

b.setLayout(new GridLayout(2, 1));
b.add(c);
b.add(t.status);
a.add(b);

c.addMouseListener(t.d);
a.setSize(100,80);a.setVisible(true);}}

class click implements MouseListener{
test t;
public click(test t){
this.t = t;
}
public void mousePressed (MouseEvent e){
t.status.setText("按下");}
public void mouseExited (MouseEvent e){
t.status.setText("离开");}
public void mouseEntered (MouseEvent e){
t.status.setText("进入");}
public void mouseReleased (MouseEvent e){
t.status.setText("抬起");}
public void mouseClicked (MouseEvent e){
t.status.setText("击完");}}

忘记你把那些东西都放在静态main方法里了,静态方法里是没有this指针的。这样应该好了

你到底想要什么效果啊,说说清楚。。。。。。是不是layout不是你想要的?效果我测过了,没问题啊,是在TextArea上触发鼠标事件在status bar显示啊,已经有两个label了,文字是显示在status bar上的,只不过颜色相同,看上去合并在一起了。
你说说看哪里不行了,是不能运行还是效果不对?当然测过。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aihua2013
2009-09-16 · TA获得超过792个赞
知道小有建树答主
回答量:354
采纳率:0%
帮助的人:335万
展开全部
package com.cyber.swing;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class text {
public static void main(String args[]) {
JFrame a = new JFrame("");
JPanel b = new JPanel();
JLabel c = new JLabel("Test area");
// 这里必须是final
final JLabel status = new JLabel("Status Bar");
b.setLayout(new GridLayout(2, 1));
b.add(c);
b.add(status);
a.add(b);

c.addMouseListener(new MouseListener() {
public void mousePressed(MouseEvent e) {
status.setText("按下");
}

public void mouseExited(MouseEvent e) {
status.setText("离开");
}

public void mouseEntered(MouseEvent e) {
status.setText("进入");
}

public void mouseReleased(MouseEvent e) {
status.setText("抬起");
}

public void mouseClicked(MouseEvent e) {
status.setText("击完");
}
});

a.setSize(100, 80);
a.setVisible(true);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lusongandlinux
2009-09-16 · TA获得超过100个赞
知道答主
回答量:265
采纳率:0%
帮助的人:164万
展开全部
楼上的都说完了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
06302010038
2009-09-21
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
我就是楼上的小号,我的修改次数到上限了,你实在觉得不行,把qq告诉我,我把效果截图发给你,我不明白你说的不行指的是什么,说说清楚。上面的测试区怎么没用了,难道你要的效果不是在测试区点击,离开进入等等时下面的状态栏显示相应的文字吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式