हाँ, यह संभव है। स्विंग का उपयोग करने के लिए मुख्य पेशेवरों में से एक वह सुविधा है जिसके साथ अमूर्त नियंत्रण बनाया जा सकता है और कुशलतापूर्वक उपयोग किया जा सकता है।
टेक्स्ट के दाईं ओर एक सर्कल खींचने के लिए मौजूदा जेबटन कक्षा को विस्तारित करने का एक त्वरित और गंदा तरीका है।
package test;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MyButton extends JButton {
private static final long serialVersionUID = 1L;
private Color circleColor = Color.BLACK;
public MyButton(String label) {
super(label);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Dimension originalSize = super.getPreferredSize();
int gap = (int) (originalSize.height * 0.2);
int x = originalSize.width + gap;
int y = gap;
int diameter = originalSize.height - (gap * 2);
g.setColor(circleColor);
g.fillOval(x, y, diameter, diameter);
}
@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
size.width += size.height;
return size;
}
/*Test the button*/
public static void main(String[] args) {
MyButton button = new MyButton("Hello, World!");
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(button);
frame.setVisible(true);
}
}
ध्यान दें कि paintComponent को ओवरराइड करके बटन की सामग्री बदला जा सकता है, लेकिन सीमा को paintBorder विधि द्वारा चित्रित किया गया है। सामग्री में परिवर्तनों को गतिशील रूप से समर्थन देने के लिए getPreferredSize विधि को भी प्रबंधित करने की आवश्यकता है। फ़ॉन्ट मेट्रिक्स और छवि आयामों को मापते समय देखभाल की जानी चाहिए।
एक नियंत्रण बनाने के लिए जिस पर आप भरोसा कर सकते हैं, उपर्युक्त कोड सही दृष्टिकोण नहीं है। आयाम और रंग स्विंग में गतिशील हैं और उपयोग और महसूस पर निर्भर हैं। यहां तक कि डिफ़ॉल्ट धातु देखो जेआरई संस्करणों में बदल गया है। सार बटन को लागू करना और स्विंग एपीआई द्वारा निर्धारित दिशानिर्देशों के अनुरूप होना बेहतर होगा। एक अच्छा प्रारंभिक बिंदु javax.swing.LookAndFeel और javax.swing.UIManager कक्षाओं को देखना है।
http://docs.oracle.com/javase/8 /docs/api/javax/swing/LookAndFeel.html
http://docs.oracle.com/javase/8 /docs/api/javax/swing/UIManager.html
Understanding the anatomy of LookAndFeel is useful for writing controls:
Creating a Custom Look and Feel