`

Swing JButton 背景色设置示例

 
阅读更多

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);
    }  
     

 

分享到:
评论

相关推荐

    JButton设置透明

    默认情况下,按钮有一个明显的背景色,通过设置此属性为`false`,我们可以移除这个背景色,使按钮看起来更加透明。 2. **`setBorderPainted(false)`**:这个方法告诉`JButton`不要绘制边框。默认情况下,按钮周围...

    JavaSwing界面设计(所有控件及示例)

    Swing 组件允许设置背景色、前景色、字体等属性,以定制界面样式。 总结起来,Java Swing 提供了一整套组件和工具,用于创建丰富的图形用户界面,无论是在桌面应用还是轻量级应用中都有广泛的应用。理解和熟练掌握...

    JButton去除边框

    `JButton`提供了设置文本、图标、边框、背景色等属性的方法。例如,`setText()`用于设置按钮上的文字,`setIcon()`用于设置按钮的图标,`setBorder()`则用于设置按钮的边框。 去除`JButton`边框的方法主要涉及`...

    Java——jbutton

    例如,我们可以改变按钮的文本、图标、背景色等。在给定的代码段中,我们看到作者创建了一个自定义的`JButton`类`JButton_Bg`,并实现了按钮的不同状态下的背景效果,包括正常状态、获得焦点状态、被按下状态和被...

    JAVA Swing日期选择控件datepicker

    2. **创建DatePicker实例**:创建DatePicker对象,你可以设置其初始日期、日期格式、是否显示时间等属性。 ```java JDatePicker datePicker = new JDatePicker(new LocalDate()); // 创建一个默认显示当前日期的...

    java swing界面设计

    - JComponent类是所有Swing组件的基类,提供了一些基本的方法和属性,如设置背景色、边框等。 - Swing组件可以通过继承并重写方法来自定义外观和行为。 6. **Swing的国际化支持** - Swing提供了强大的本地化支持...

    java swing控件

    下面是一个简单的示例,展示了如何使用 Swing 创建一个包含标题、内容面板和背景色设置的窗口。 ```java import java.awt.*; import javax.swing.*; public class ContentPaneDemo extends JFrame { public ...

    Swing的border使用

    通过设置组件的边框,我们可以改变组件的视觉表现,如添加边框、调整边缘空间或改变背景色。`Border`接口定义了几个方法,如`getBorderInsets()`用于获取边框的内嵌尺寸,`isOpaque()`检查边框是否不透明,以及`...

    swing中自定义对话框的几种实际用法

    除了基本的组件外,还可以通过调整背景色、边框、字体等属性,以及使用自定义图标,来进一步定制对话框的外观,使其更符合应用的整体风格。 总结,Swing中的自定义对话框是提高用户体验和增强应用功能的重要手段。...

    JTable设置行背景颜色及实现打印功能的示例代码.doc

    在这个方法中,我们可以根据当前行的索引和颜色数组来决定行的背景色。 ```java public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component c = super.prepareRenderer...

    Java程序设计:031804_按钮组件:JButton.ppt

    例如,我们可以使用`setFont`方法更改按钮上的文本字体,`setBackground`改变按钮背景色,`setForeground`改变文本颜色。 布局管理器是Swing中用来自动调整组件大小和位置的工具,如FlowLayout、GridLayout、...

    自定义Swing组件代码

    你可以在这个方法中进行绘图,如绘制背景色、边框、文本等。 - 事件处理:Swing使用事件监听器模型。通过添加ActionListener、MouseListener等监听器,我们可以响应用户的操作,如点击按钮、移动鼠标等。 五、组件...

    韩顺平循序渐进学java从入门到精通课件笔记

    - **设置背景色**:可以通过`setBackground()`方法来改变面板的背景色。 ### 3. 示例代码分析 在提供的代码片段中,演示了如何使用`JButton`和`JPanel`来实现一个简单的颜色切换功能。 #### 示例1: demo9_3 类 -...

    Java Swing中JTable渲染器与编辑器用法示例

    渲染器负责单元格的外观,例如前景色、背景色、单元格提示等,而编辑器负责单元格的内容和事件响应。 JTable的内容、外观、事件响应在很大程度上是由渲染器与编辑器控制的。具体说来,渲染器负责单元格的外观,例如...

    Java Swing之游戏设计2

    - 通过设置按钮的背景颜色与棋盘背景色相同,可以在视觉上达到空格子的效果。 2. **禁用按钮点击事件**: - 使用`setEnabled(false)`方法可以让按钮变得不可点击,从而模拟空格子。 3. **标识可点击按钮**: -...

    java swing 仿酷我音乐盒界面源码

    此外,通过设定组件的边框、背景色、字体样式等属性,可以进一步定制界面的外观。 Swing 还包含了一些高级组件,如JProgressBar可以用来显示加载进度,JSlider则可以用来调节音量或歌曲进度。对于播放状态,我们...

    上机实验报告(13).doc

    - (B) t.getContentPane().setBackground(Color.PINK):正确做法,设置窗体内容面板背景色。 - (C) t.setColor(PINK):不存在此方法。 - (D) t.Color=Color.Pink:语法错误。 - **正确答案**:(B) t....

    中國象棋----基于Swing的一個游戲

    每个格子可能由一个JButton表示,按钮的背景色和图标可以用来区分不同的棋子和空位。此外,通过监听JButton的点击事件,实现棋子的移动和吃子逻辑。 在游戏逻辑部分,开发者需要深入理解中国象棋的规则,包括每种...

    java图形界面初学.pdf

    4. 关于Swing组件的属性设置:组件具有不同的属性,例如大小、颜色、字体等,开发者可以通过API提供的方法来设置这些属性,比如背景色设置为青色(Color.cyan),或者设置组件的尺寸、位置等。 在【部分内容】中,...

    图形用户界面编程示例

    例如,可以设置组件的背景色、边框样式,或者通过`Icon`类添加图标。 文件`lec15`可能包含了这个图形用户界面编程实例的第15节内容,可能涉及到更深入的GUI主题,如对话框(Dialog)、菜单(Menu)和工具栏...

Global site tag (gtag.js) - Google Analytics