2012-01-16 8 views
9

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

मैं जेपी प्रोग्रेसबार ट्यूटोरियल देख रहा हूं लेकिन उनमें से कोई भी बार स्टाइल को संदर्भित नहीं करता है। एपीआई को पढ़ना मुझे एक getUI विधि मिली जो ProgressBarUI ऑब्जेक्ट देता है लेकिन मुझे इसे अनुकूलित करने के कई तरीके नहीं दिखते हैं।

जो मैं चाहता हूं वह गोलाकार कोनों को जोड़ना, पृष्ठभूमि और अग्रभूमि रंग, चौड़ाई, लंबाई, सामान्य बदलना है।

धन्यवाद!

उत्तर

21

बनाने उपयोगकर्ता के चुने हुए लुक & को प्रतिस्थापित नहीं करना चाहते हैं, आप यूआई प्रतिनिधि को सिर्फ BasicProgressBarUI से व्युत्पन्न कर सकते हैं।

enter image description here

import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.RenderingHints; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JProgressBar; 
import javax.swing.plaf.basic.BasicProgressBarUI; 

/** @see http://stackoverflow.com/questions/8884297 */ 
public class ProgressBarUITest extends JPanel { 

    public ProgressBarUITest() { 
     JProgressBar jpb = new JProgressBar(); 
     jpb.setUI(new MyProgressUI()); 
     jpb.setForeground(Color.blue); 
     jpb.setIndeterminate(true); 
     this.add(jpb); 
    } 

    private static class MyProgressUI extends BasicProgressBarUI { 

     private Rectangle r = new Rectangle(); 

     @Override 
     protected void paintIndeterminate(Graphics g, JComponent c) { 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.setRenderingHint(
       RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
      r = getBox(r); 
      g.setColor(progressBar.getForeground()); 
      g.fillOval(r.x, r.y, r.width, r.height); 
     } 
    } 

    private void display() { 
     JFrame f = new JFrame("ProgressBarUITest"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new ProgressBarUITest().display(); 
      } 
     }); 
    } 
} 
+0

बहुत विस्तृत उत्तर के लिए धन्यवाद! +1 और सही उत्तर: डी। किसी भी मामले में, अंत में मैंने इसे जेननेल का उपयोग गोलाकार सीमाओं के साथ किया, एक दूसरे के ऊपर एक ओवरलैप किया, क्योंकि मेरी "प्रगति सलाखों" स्थैतिक हैं, चाल यह करती है। अच्छा टिप, ट्रैशगोड के लिए वैसे भी, इसे – AlejandroVK

+1

@ स्नैश के लिए ट्रैशगोड +1 के लिए इसे लिखने के लिए इसे लिख दिया जाएगा, जबकि Google पर 'जेपी प्रोग्रेसबार' को कस्टमाइज़ करने के तरीके को देखते हुए मुझे यह मिला। स्निपेट के साथ 1 चीज: 'पेंट इंडिडेटर्मिनेट (..)' में 'ग्राफ़िक की ऑब्जेक्ट' जी' को 'ग्राफिक्स 2 डी' में डाला गया है, हालांकि आप 'g.fillOval (..)' के माध्यम से पेंट करते हैं, इस प्रकार 'g2d.fillOval (। ।) 'कॉल जो' जेपी प्रोग्रेसबार 'आयताकार सीमा बनाएगा। –

+0

@ डेविड क्राउकंप: अच्छा पकड़; हालांकि "विरासत विधियां समान रूप से प्रदर्शन करती हैं ... डिफ़ॉल्ट विशेषता सेटिंग्स के तहत," 'g2d.fill (आकार) 'अधिक बहुमुखी है। – trashgod

6

कि सबसे आसान तरीका है change the LookAndFeel होगा या आप तो भी हो सकता है अपनी खुद की कक्षा कि डिफ़ॉल्ट एल & Fs में से एक के बंद प्रदान करता है और सिर्फ प्रगति बार के लिए यूआई परिवर्तन ...

+0

कैसे एक JProgressBar लिए विशेष रूप से यह करने के लिए पर कोई भी विचार? – AlejandroVK

+0

@AlejandroVK आपको यह बताना मुश्किल है कि आपको http://stackoverflow.com/questions/3954616/look-and-feel-in-java का प्रयास करना है, मैं सबस्टेंस प्रीफर करूँगा, लेकिन बहुत अधिक ईडीटी संवेदनशील है, – mKorbel

+0

उन सभी को ओवरकिल लगता है सिर्फ मेरी जरूरतों के लिए ... धन्यवाद वैसे भी – AlejandroVK