java swing 按钮上字在鼠标划过消失,是怎么回事。

十秒耿直拆包选手 2014-08-01 03:37:10
rt
corejava volume 中第八章例子,怎么我的鼠标放到按钮上字就没有了。



/**
*
*/
package chap08;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
* @version 1.0
* @date 2014-06-28
* @author jowei
*
*/
public class ButtonFrame extends JFrame {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//Frame1 f = new Frame1();
Frame2 f = new Frame2();
//Frame3 f = new Frame3();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//f.pack();
f.setVisible(true);
}
}

/**
* descr:private local class implements ActionListener.
* @version 1.0 2014-07-03
*
* */
class Frame1 extends JFrame {

public Frame1() {

setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
add(buttonPanel, BorderLayout.EAST);

JButton btnYellow = new JButton(BG_YELLOW);
JButton btnBlue = new JButton(BG_BLUE);
JButton btnRed = new JButton(BG_RED);

buttonPanel.add(btnYellow);
buttonPanel.add(btnBlue);
buttonPanel.add(btnRed);

ColorAction yellowAction = new ColorAction(Color.YELLOW);
ColorAction bluewAction = new ColorAction(Color.BLUE);
ColorAction redAction = new ColorAction(Color.RED);

btnYellow.addActionListener(yellowAction);
btnBlue.addActionListener(bluewAction);
btnRed.addActionListener(redAction);
}

private class ColorAction implements ActionListener {

public ColorAction(Color c) {

this.backgroundColor = c;
}

@Override
public void actionPerformed(ActionEvent e) {

buttonPanel.setBackground(this.backgroundColor);
}

private Color backgroundColor;
}

private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;

private static final String BG_YELLOW = "Yellow";
private static final String BG_BLUE = "Blue";
private static final String BG_RED = "Red";
}

/**
* descr:anonymous inner class implements ActionListener.
* */
class Frame2 extends JFrame {

public Frame2() {

//setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
add(buttonPanel, BorderLayout.CENTER);

makeButton(Frame2.BG_YELLOW, Color.YELLOW);
makeButton(Frame2.BG_BLUE, Color.BLUE);
makeButton(Frame2.BG_RED, Color.RED);
}

private void makeButton(String name, final Color bgColor) {

JButton btn = new JButton(name);
buttonPanel.add(btn);

btn.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

buttonPanel.setBackground(bgColor);
}
});
}

@Override
public void setPreferredSize(Dimension preferredSize) {

super.setPreferredSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
}

@Override
public Dimension getPreferredSize() {

return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}

@Override
public void setMinimumSize(Dimension minimumSize) {

super.setMinimumSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
}

private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;

private static final String BG_YELLOW = "Yellow";
private static final String BG_BLUE = "Blue";
private static final String BG_RED = "Red";
}

class Frame3 extends JFrame {

public Frame3() {

setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
add(buttonPanel, BorderLayout.CENTER);

Action yellowAction = new ColorAction(Frame3.BG_YELLOW, Color.YELLOW);
Action blueAction = new ColorAction(Frame3.BG_BLUE, Color.BLUE);
Action redAction = new ColorAction(Frame3.BG_RED, Color.RED);
Action testAction = new ColorAction("test", Color.RED);

makeButton(yellowAction);
makeButton(blueAction);
makeButton(redAction);
makeButton(testAction);
}

private void makeButton(Action act) {

JButton button = new JButton(act);

buttonPanel.add(button);
}

private class ColorAction extends AbstractAction {

public ColorAction(String name, Color color) {

putValue(Action.NAME, name);
putValue(ColorAction.COLOR_NAME, color);
putValue(Action.SHORT_DESCRIPTION, "Set panel color to " + name.toLowerCase());
}

@Override
public void actionPerformed(ActionEvent e) {

Color c = (Color) getValue(ColorAction.COLOR_NAME);
buttonPanel.setBackground(c);
}

private final static String COLOR_NAME = "color";
}

private JPanel buttonPanel;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;

private static final String BG_YELLOW = "Yellow";
private static final String BG_BLUE = "Blue";
private static final String BG_RED = "Red";
}




...全文
271 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼主 怎么解决的 我也遇到了
天命王子 2015-05-16
  • 打赏
  • 举报
回复
引用 2 楼 weiweiqiao 的回复:
结贴,应该是java自己的bug,换到jdk7_up15就正常显示了。
你确定是jdk7的bug吗?为什么我换到jdk8还是不正常显示呢?
  • 打赏
  • 举报
回复
结贴,应该是java自己的bug,换到jdk7_up15就正常显示了。
  • 打赏
  • 举报
回复
少加了一句: 将每个Frame中的setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);注释掉就不会出现字不显示的情况,只是此时初始化的Frame最小化。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧