package buttonDemo;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
public class CrystalButton extends JButton {
private String text;
private float alpha = 1f;
private boolean isMouseEntered = false;
private boolean isPressed = false;
private Color COLOR_DARK_PURPLE = new Color(161, 123, 192);
private Color COLOR_LIGHT_PURPLE = new Color(255, 228, 255);
private Color COLOR_TEXT_DARKBLUE = new Color(90, 121,255);
public CrystalButton(String buttonText) {
// super(buttonText);
this.text = buttonText;
initStyle();
//添加鼠标监听
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
System.out.println("mouse click");
}
@Override
public void mouseEntered(MouseEvent e) {
//当鼠标进入时,鼠标进入状态改为TRUE,并重绘按钮
isMouseEntered = true;
System.out.println("mouse entered");
repaint();
}
@Override
public void mouseExited(MouseEvent e) {
isMouseEntered = false;
System.out.println("mouse exited");
repaint();
}
@Override
public void mousePressed(MouseEvent evt)
{
System.out.println("mouse press");
isPressed = true;
repaint();
}
@Override
public void mouseReleased(MouseEvent evt)
{
System.out.println("mouse release");
isPressed = false;
repaint();
}
});
}
private void initStyle() {
setOpaque(false);
setBorder(BorderFactory.createLineBorder(COLOR_DARK_PURPLE, 1));
setBorderPainted(true);
setFocusable(false);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
AlphaComposite composite = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, alpha);
g2.setComposite(composite);
drawButtonBackground(g2, this);
}
private void drawButtonBackground(Graphics2D g2, JButton bt) {
if(isMouseEntered){
if(isPressed){
g2.setPaint(new GradientPaint(0,0, Color.WHITE, 0, bt.getHeight()*2/5, Color.WHITE));
g2.fillRect(0, 0, bt.getWidth(), bt.getHeight()*2/5);
g2.setPaint(new GradientPaint(0,bt.getHeight()*2/5, COLOR_LIGHT_PURPLE, 0, bt.getHeight(), Color.WHITE));
g2.fillRect(0, bt.getHeight()*2/5, bt.getWidth(), bt.getHeight()*3/5);
}else{
g2.setPaint(new GradientPaint(0,0, Color.WHITE, 0, bt.getHeight(), COLOR_LIGHT_PURPLE));
g2.fillRect(0, 0, bt.getWidth(), bt.getHeight());
}
}else{
g2.setPaint(new GradientPaint(0,0, COLOR_LIGHT_PURPLE, 0, bt.getHeight(), COLOR_DARK_PURPLE));
g2.fillRect(0, 0, bt.getWidth(), bt.getHeight());
}
g2.setColor(COLOR_TEXT_DARKBLUE);
g2.drawString(text,bt.getWidth()/4, this.getHeight()*3/5);
g2.setClip(0,0,1000, 1000);
g2.setPaint(new GradientPaint(0,0, COLOR_DARK_PURPLE,0 , bt.getHeight(), COLOR_DARK_PURPLE));
g2.fillPolygon(new int[] {0,0,bt.getHeight()/2},new int[] {0,bt.getHeight(),bt.getHeight()/2},3);
g2.setPaint(new GradientPaint(bt.getWidth(), bt.getHeight(), COLOR_DARK_PURPLE, bt.getWidth()-bt.getHeight()/2, bt.getHeight(), COLOR_DARK_PURPLE));
g2.fillPolygon(new int[] {bt.getWidth(),bt.getWidth(),bt.getWidth()-bt.getHeight()/2},new int[] {0,bt.getHeight(),bt.getHeight()/2},3);
}
}
相关推荐
默认情况下,按钮有一个明显的背景色,通过设置此属性为`false`,我们可以移除这个背景色,使按钮看起来更加透明。 2. **`setBorderPainted(false)`**:这个方法告诉`JButton`不要绘制边框。默认情况下,按钮周围...
Swing 组件允许设置背景色、前景色、字体等属性,以定制界面样式。 总结起来,Java Swing 提供了一整套组件和工具,用于创建丰富的图形用户界面,无论是在桌面应用还是轻量级应用中都有广泛的应用。理解和熟练掌握...
`JButton`提供了设置文本、图标、边框、背景色等属性的方法。例如,`setText()`用于设置按钮上的文字,`setIcon()`用于设置按钮的图标,`setBorder()`则用于设置按钮的边框。 去除`JButton`边框的方法主要涉及`...
例如,我们可以改变按钮的文本、图标、背景色等。在给定的代码段中,我们看到作者创建了一个自定义的`JButton`类`JButton_Bg`,并实现了按钮的不同状态下的背景效果,包括正常状态、获得焦点状态、被按下状态和被...
2. **创建DatePicker实例**:创建DatePicker对象,你可以设置其初始日期、日期格式、是否显示时间等属性。 ```java JDatePicker datePicker = new JDatePicker(new LocalDate()); // 创建一个默认显示当前日期的...
- JComponent类是所有Swing组件的基类,提供了一些基本的方法和属性,如设置背景色、边框等。 - Swing组件可以通过继承并重写方法来自定义外观和行为。 6. **Swing的国际化支持** - Swing提供了强大的本地化支持...
下面是一个简单的示例,展示了如何使用 Swing 创建一个包含标题、内容面板和背景色设置的窗口。 ```java import java.awt.*; import javax.swing.*; public class ContentPaneDemo extends JFrame { public ...
通过设置组件的边框,我们可以改变组件的视觉表现,如添加边框、调整边缘空间或改变背景色。`Border`接口定义了几个方法,如`getBorderInsets()`用于获取边框的内嵌尺寸,`isOpaque()`检查边框是否不透明,以及`...
除了基本的组件外,还可以通过调整背景色、边框、字体等属性,以及使用自定义图标,来进一步定制对话框的外观,使其更符合应用的整体风格。 总结,Swing中的自定义对话框是提高用户体验和增强应用功能的重要手段。...
在这个方法中,我们可以根据当前行的索引和颜色数组来决定行的背景色。 ```java public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer...
例如,我们可以使用`setFont`方法更改按钮上的文本字体,`setBackground`改变按钮背景色,`setForeground`改变文本颜色。 布局管理器是Swing中用来自动调整组件大小和位置的工具,如FlowLayout、GridLayout、...
你可以在这个方法中进行绘图,如绘制背景色、边框、文本等。 - 事件处理:Swing使用事件监听器模型。通过添加ActionListener、MouseListener等监听器,我们可以响应用户的操作,如点击按钮、移动鼠标等。 五、组件...
- **设置背景色**:可以通过`setBackground()`方法来改变面板的背景色。 ### 3. 示例代码分析 在提供的代码片段中,演示了如何使用`JButton`和`JPanel`来实现一个简单的颜色切换功能。 #### 示例1: demo9_3 类 -...
渲染器负责单元格的外观,例如前景色、背景色、单元格提示等,而编辑器负责单元格的内容和事件响应。 JTable的内容、外观、事件响应在很大程度上是由渲染器与编辑器控制的。具体说来,渲染器负责单元格的外观,例如...
- 通过设置按钮的背景颜色与棋盘背景色相同,可以在视觉上达到空格子的效果。 2. **禁用按钮点击事件**: - 使用`setEnabled(false)`方法可以让按钮变得不可点击,从而模拟空格子。 3. **标识可点击按钮**: -...
此外,通过设定组件的边框、背景色、字体样式等属性,可以进一步定制界面的外观。 Swing 还包含了一些高级组件,如JProgressBar可以用来显示加载进度,JSlider则可以用来调节音量或歌曲进度。对于播放状态,我们...
- (B) t.getContentPane().setBackground(Color.PINK):正确做法,设置窗体内容面板背景色。 - (C) t.setColor(PINK):不存在此方法。 - (D) t.Color=Color.Pink:语法错误。 - **正确答案**:(B) t....
每个格子可能由一个JButton表示,按钮的背景色和图标可以用来区分不同的棋子和空位。此外,通过监听JButton的点击事件,实现棋子的移动和吃子逻辑。 在游戏逻辑部分,开发者需要深入理解中国象棋的规则,包括每种...
4. 关于Swing组件的属性设置:组件具有不同的属性,例如大小、颜色、字体等,开发者可以通过API提供的方法来设置这些属性,比如背景色设置为青色(Color.cyan),或者设置组件的尺寸、位置等。 在【部分内容】中,...
例如,可以设置组件的背景色、边框样式,或者通过`Icon`类添加图标。 文件`lec15`可能包含了这个图形用户界面编程实例的第15节内容,可能涉及到更深入的GUI主题,如对话框(Dialog)、菜单(Menu)和工具栏...