JButton button=new JButton();
button.setBorderPainted(false);
button.setContentAreaFilled(false);
button.setUI(MyButtonUi.ui);
button.setPreferredSize(new Dimension(120,30));
onpaint
есть ли в Java аналог OnPaint на C++, или как можно сделать, чтобы пи нажатии на button она меняла вид?
JButton b = new JButton();
b.setColor(Color.white);
b.addActionListener(new ActionLister() {
public void actionPerformed(ActionEvent e) {
b.setColor(Color.black);
}
});
[/highlight]
Это то что требуется?
приблизительно да, только у jButton нету метода setColor, и необходимо изменить не цвет, а прорисовку кнопки...
Форму изменить - тоже какой-то метод есть, только я не помню.
Цитата: P*t*
ой, это я ошибся. Не setColor(), а setBackground()
Форму изменить - тоже какой-то метод есть, только я не помню.
Форму изменить - тоже какой-то метод есть, только я не помню.
а если требуется подставить вместо кнопки рисунок jpg?
http://java.sun.com/javase/6/docs/api/javax/swing/JButton.html
Насчет аналога onpaint() - это void paint(Graphics g)
protected void paintComponent(Graphics g), определенного в классе JComponent
Цитата: in8finity
Насколько мне известно, более корректно использование
protected void paintComponent(Graphics g), определенного в классе JComponent
protected void paintComponent(Graphics g), определенного в классе JComponent
Точно! :) Лучше всего присваивать необходимое UI
Код:
А вота и само UI(можно нарисовать чего угодно, конечно):
Код:
package com.suppx.ems;
import com.suppx.ems.gui.common.MyButtonUI;
import javax.swing.plaf.basic.BasicButtonUI;
import javax.swing.*;
import java.awt.*;
public class MyButtonUi extends BasicButtonUI {
final static BasicButtonUI ui=new MyButtonUi();
Color one=new Color(3, 118, 216);
Color two=Color.WHITE;
MyButtonUi(){
}
public void update(Graphics g, JComponent c){
AbstractButton b = (AbstractButton) c;
ButtonModel model=b.getModel();
Graphics2D g2d=(Graphics2D)g;
int width=c.getSize().width;
int height=c.getSize().height;
if(!model.isPressed()&&!model.isRollover()){
g2d.setPaint(new GradientPaint(0,0,one,width-3,height-3,two));
g2d.fillRect(0,0,width-3,height-3);
g2d.setColor(Color.BLUE.brighter());
g2d.drawRect(0,0,width-3,height-3);
}else {
g2d.setPaint(new GradientPaint(2,2,two,width-7,height-7,one));
g2d.fillRect(2,2,width-7,height-7);
g2d.setColor(Color.black);
g2d.drawRect(2,2,width-7,height-7);
}
if(model.isRollover()&!model.isPressed()){
g2d.setPaint(new GradientPaint(0,0,two,width-3,height-3,one));
g2d.fillRect(0,0,width-3,height-3);
g2d.setColor(Color.black);
g2d.drawRect(0,0,width-3,height-3);
}
// g.setColor(Color.BLACK);
// g.fillRect(0,0,100,100);
paint(g,c);
}
}
import com.suppx.ems.gui.common.MyButtonUI;
import javax.swing.plaf.basic.BasicButtonUI;
import javax.swing.*;
import java.awt.*;
public class MyButtonUi extends BasicButtonUI {
final static BasicButtonUI ui=new MyButtonUi();
Color one=new Color(3, 118, 216);
Color two=Color.WHITE;
MyButtonUi(){
}
public void update(Graphics g, JComponent c){
AbstractButton b = (AbstractButton) c;
ButtonModel model=b.getModel();
Graphics2D g2d=(Graphics2D)g;
int width=c.getSize().width;
int height=c.getSize().height;
if(!model.isPressed()&&!model.isRollover()){
g2d.setPaint(new GradientPaint(0,0,one,width-3,height-3,two));
g2d.fillRect(0,0,width-3,height-3);
g2d.setColor(Color.BLUE.brighter());
g2d.drawRect(0,0,width-3,height-3);
}else {
g2d.setPaint(new GradientPaint(2,2,two,width-7,height-7,one));
g2d.fillRect(2,2,width-7,height-7);
g2d.setColor(Color.black);
g2d.drawRect(2,2,width-7,height-7);
}
if(model.isRollover()&!model.isPressed()){
g2d.setPaint(new GradientPaint(0,0,two,width-3,height-3,one));
g2d.fillRect(0,0,width-3,height-3);
g2d.setColor(Color.black);
g2d.drawRect(0,0,width-3,height-3);
}
// g.setColor(Color.BLACK);
// g.fillRect(0,0,100,100);
paint(g,c);
}
}
Цитата: Mendler
аналог OnPaint на C++
В С++ такого тоже нет. )