दिलचस्प पोस्ट
ऑप्शन के लिए स्प्रिंग सिक्योरिटी एचटीपी विधि अक्षम करें मैं डब्ल्यूपीएफ में डीपीआई कैसे प्राप्त करूं? रूबी प्रोग्राम को एक विंडोज सर्विस के रूप में चलाने? इंसटर्स को फ़्लोट्स के रूप में व्यक्त करने से जीएसएल को कैसे रोकें? कन्वर्ट सिस्टम। ड्रॉइंग। कॉलर आरजीबी और हेक्स वैल्यू के लिए जावा में एक तारीख को एन घंटे जोड़ना? $ _SERVER सुरक्षित है? कैसे अद्यतन करें + PostgreSQL में शामिल हो? कंसोल एप्लिकेशन के मानक इनपुट को पुनर्निर्देशित करना एसक्यूएल चर के लिए एक निष्पाद परिणाम कैसे निर्दिष्ट करें? जीआईटी लॉग और बेजोड़ रेपो पर दिखाएं किसी फ़ोल्डर से एक छवि से JLabel में आइकन कैसे सेट करें? जीआईटी के लिए उपयोग-कम-टाइम्स के बराबर क्या है? क्यों नहीं है एनएएन (शून्य) == जेएस में झूठ? क्यों यह सरल .नेट कंसोल ऐप में इतने धागे हैं?

जेबटन के साथ जावा में एक कस्टम बटन बनाना

मैं एक बटन बनाने का प्रयास कर रहा हूं जिसमें एक कस्टम आकृति (हेक्सागन) है, लेकिन अन्यथा एक सामान्य जेबटन की तरह काम करता है (जो कि एक्शनलिस्टर के साथ काम करता है)।

मैंने एक ऐसा वर्ग बनाया है जो ऐब्टबेट बटन का विस्तार करता है, लेकिन जब मैं इसे क्लिक करता हूं तो ActionListener को ईवेंट भेजना प्रतीत नहीं होता अगर मैं जेबटन का विस्तार करने के लिए क्लास को बदलता हूं तो यह पूरी तरह से काम करता है, लेकिन बटन को प्रदर्शित होने के तरीके के रूप में यह स्क्रू बनाती है। मैं मान रहा हूँ कि एक ऐसी विधि है जिसे मुझे घटनाओं पर आग लगाने के लिए ओवरराइड करने की आवश्यकता है, लेकिन मुझे पता नहीं है कि यह क्या है।

Solutions Collecting From Web of "जेबटन के साथ जावा में एक कस्टम बटन बनाना"

आपको JButton वर्ग का विस्तार नहीं करना चाहिए। निम्नलिखित चीजों का प्रयास करें और आप विचार प्राप्त करेंगे।

पहला कदम JButton उप-वर्ग है

उसके बाद, अपने उप- paintComponent(Graphics) , paintComponent(Graphics) विधि को फिर से परिभाषित करना प्रारंभ करें। यदि आप कोई बदलाव चाहते हैं

फिर, paintBorder(Graphics) को ओवरराइड करने के लिए इसे षट्भुज का आकार देना।

यदि आप कस्टमबुटन यूआई बनाना चाहते हैं तो आपको देखना होगा

  • BasicXxxUI लिए गहन

  • JButton से रंगों की सूची ओवरआइड

नोट रंग नहीं है यह गलत है, केवल paint() विधि का उपयोग करें,

नीचे सिर्फ एक सरल उदाहरण है यदि यह संभव है (धातु जेबटन के लिए) सिर्फ धातु लाफ के लिए नोट करें, मैं बहुत आलसी हूं और रंगों के ऊपर, पेंट आइकन, पेंटफॉक्स, पेंटबॉर्डर के बारे में कुछ नहीं है (बेसिकबुटटन यूआई से उपलब्ध तरीकों की जांच करने के लिए आपको आवश्यक सभी फ़ंक्शन उपलब्ध हैं), और कुछ मैं बटनमॉडेल को डालता हूं, बस के लिए मेरा आनंद

परीक्षण बटन छवि

 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.AbstractBorder; import javax.swing.border.Border; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.metal.MetalButtonUI; public class TextAreaInButton { private JFrame frame = new JFrame("sssssssss"); private JButton tip1Null = new JButton(" test button "); public TextAreaInButton() { Border line, raisedbevel, loweredbevel, title, empty; line = BorderFactory.createLineBorder(Color.black); raisedbevel = BorderFactory.createRaisedBevelBorder(); loweredbevel = BorderFactory.createLoweredBevelBorder(); title = BorderFactory.createTitledBorder(""); empty = BorderFactory.createEmptyBorder(1, 1, 1, 1); final Border compound; Color crl = (Color.blue); compound = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl)); Color crl1 = (Color.red); final Border compound1; compound1 = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl1)); Color crl2 = (Color.black); final Border compound2; compound2 = BorderFactory.createCompoundBorder(empty, new OldRoundedBorderLine(crl2)); tip1Null.setFont(new Font("Serif", Font.BOLD, 14)); tip1Null.setForeground(Color.darkGray); tip1Null.setPreferredSize(new Dimension(50, 30)); tip1Null.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { } }); tip1Null.setBorderPainted(true); tip1Null.setFocusPainted(false); tip1Null.setBorder(compound); tip1Null.setHorizontalTextPosition(SwingConstants.CENTER); tip1Null.setVerticalTextPosition(SwingConstants.BOTTOM); tip1Null.setUI(new ModifButtonUI()); tip1Null.getModel().addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { ButtonModel model = (ButtonModel) e.getSource(); if (model.isRollover()) { tip1Null.setBorder(compound1); } else { tip1Null.setBorder(compound); } if (model.isPressed()) { tip1Null.setBorder(compound2); } } }); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(tip1Null, BorderLayout.CENTER); frame.setLocation(150, 150); frame.setPreferredSize(new Dimension(310, 75)); frame.setLocationRelativeTo(null); frame.pack(); frame.setVisible(true); } public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { @Override public void run() { TextAreaInButton taib = new TextAreaInButton(); } }); } } class OldRoundedBorderLine extends AbstractBorder { private final static int MARGIN = 5; private static final long serialVersionUID = 1L; private Color color; OldRoundedBorderLine(Color clr) { color = clr; } public void setColor(Color clr) { color = clr; } @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { ((Graphics2D) g).setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(color); g.drawRoundRect(x, y, width, height, MARGIN, MARGIN); } @Override public Insets getBorderInsets(Component c) { return new Insets(MARGIN, MARGIN, MARGIN, MARGIN); } @Override public Insets getBorderInsets(Component c, Insets insets) { insets.left = MARGIN; insets.top = MARGIN; insets.right = MARGIN; insets.bottom = MARGIN; return insets; } } class ModifButtonUI extends MetalButtonUI { private static final ModifButtonUI buttonUI = new ModifButtonUI(); ModifButtonUI() { } public static ComponentUI createUI(JComponent c) { return new ModifButtonUI(); } @Override public void paint(Graphics g, JComponent c) { final Color color1 = new Color(230, 255, 255, 0); final Color color2 = new Color(255, 230, 255, 64); final Color alphaColor = new Color(200, 200, 230, 64); final Color color3 = new Color( alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), 0); final Color color4 = new Color( alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), 64); super.paint(g, c); Graphics2D g2D = (Graphics2D) g; GradientPaint gradient1 = new GradientPaint( 0.0F, (float) c.getHeight() / (float) 2, color1, 0.0F, 0.0F, color2); Rectangle rec1 = new Rectangle(0, 0, c.getWidth(), c.getHeight() / 2); g2D.setPaint(gradient1); g2D.fill(rec1); GradientPaint gradient2 = new GradientPaint( 0.0F, (float) c.getHeight() / (float) 2, color3, 0.0F, c.getHeight(), color4); Rectangle rec2 = new Rectangle(0, c.getHeight() / 2, c.getWidth(), c.getHeight()); g2D.setPaint(gradient2); g2D.fill(rec2); } @Override public void paintButtonPressed(Graphics g, AbstractButton b) { paintText(g, b, b.getBounds(), b.getText()); g.setColor(Color.red.brighter()); g.fillRect(0, 0, b.getSize().width, b.getSize().height); } public void paintBorder(Graphics g) { } @Override protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, Rectangle iconRect) { } } 

मुझे पता है कि इस प्रश्न का उत्तर दिया गया है, लेकिन आप अंतर्निहित तरीकों का उपयोग करना और विभिन्न राज्यों में अपने बटन को चित्रित करने के लिए छवियों का उपयोग करना चाहते हैं।

यहां कुछ कोड हैं जो मैं कस्टम बटन उत्पन्न करने के लिए उपयोग किया था।

 BufferedImage startButton = ImageIO.read(getClass().getResource("/icons/standard/buttons/start_backup.png")); BufferedImage startButtonHover = ImageIO.read(getClass().getResource("/icons/standard/buttons/start_backup_hover.png")); BufferedImage startButtonActive = ImageIO.read(getClass().getResource("/icons/standard/buttons/start_backup_active.png")); JButton startBackupButton = new JButton(new ImageIcon(startButton)); startBackupButton.setRolloverIcon(new ImageIcon(startButtonHover)); startBackupButton.setPressedIcon(new ImageIcon(startButtonActive)); startBackupButton.setBorder(BorderFactory.createEmptyBorder()); startBackupButton.setContentAreaFilled(false); startBackupButton.setFocusable(false); 

इसके बाद आप एक क्रिया श्रोता को सामान्य रूप में जोड़ सकते हैं।

एक जेलेबेल का प्रयास करें और किसी भी आकार के लिए एक छवि का उपयोग करें !!

  JLabel lbl = new JLabel(""); lbl.setIcon(new ImageIcon("shape.png")); lbl.setBounds(548, 11, 66, 20); contentPane.add(lbl); lbl.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { System.exit(0); } });