2013-10-21 9 views
7

मेरे पास स्विंग में स्टॉप घड़ी के लिए यह कार्य कोड है। मैं दूसरी लाइन पर केंद्रित Time Remaining 300 seconds लेबल रखना चाहता हूं। यहाँ मेरा कोड है। enter image description hereJfrabel स्विंग में JLabel को कैसे केन्द्रित करें?

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class TimerGUI extends JPanel { 
    JLabel promptLabel, timerLabel; 
    final int count = 30; 
    JButton start; 
    JButton end; 
    Timer timer; 

    public TimerGUI() { 
     setLayout(new GridLayout(0,2)); 

     start = new JButton("Start"); 
     add(start); 
     Event e = new Event(); 
     start.addActionListener(e); 

     end = new JButton("End"); 
     end.setEnabled(false); 
     add(end); 
     end.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       timer.stop(); 
       start.setEnabled(true); 
       end.setEnabled(false); 
       timerLabel.setText("Time Remaining " + count + " seconds"); 

      } 

     }); 

     timerLabel = new JLabel("Time Remaining 300 seconds"); 
     add(timerLabel); 

    } 

    private class Event implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      start.setEnabled(false); 
      end.setEnabled(true); 
      timerLabel.setText("Time Remaining " + count + " seconds"); 

      TimeClass tc = new TimeClass(count); 
      timer = new Timer(1000, tc); 
      timer.start(); 

     } 
    } 

    private class TimeClass implements ActionListener { 
     int counter; 

     public TimeClass(int count) { 
      this.counter = count; 

     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      counter--; 
      if (counter <= 5) { 
       Toolkit.getDefaultToolkit().beep(); 
      } 

      if (counter >= 1) { 
       timerLabel.setText("Time Remaining " + counter + " seconds"); 
      } else { 
       timer.stop(); 
       timerLabel.setText("game over"); 
      } 

     } 
    } 

    public static void main(String[] args) { 
     JFrame myframe = new JFrame(); 
     TimerGUI timer = new TimerGUI(); 
     // myframe.getContentPane().add(content,BorderLayout.CENTER); 
     myframe.getContentPane().add(timer, BorderLayout.CENTER); 
     myframe.setTitle("Hangman Game"); 
     myframe.pack(); 
     myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     myframe.setLocationRelativeTo(null); 
     myframe.setVisible(true); 

    } 

} 

संपादित करें: यह करने के लिए बदल रहा है।

timerLabel = new JLabel("Time Remaining 300 seconds"); 
     add(timerLabel,SwingConstants.CENTER); 

अलग ouput देता है, कृपया छवि

enter image description here

उत्तर

12

बदलें अपनी JLabel क्षैतिज संरेखण देखते हैं। निर्माता बदलकर आप यह कर मदद कर सकते हैं:

timerLabel = new JLabel("Time Remaining 300 seconds"); 

रहे हैं:

timerLabel = new JLabel("Time Remaining 300 seconds", SwingConstants.CENTER); 

इसके अलावा घोंसला अपने JPanels प्रत्येक का अपना लेआउट का उपयोग कर। उदाहरण के लिए,

import java.awt.BorderLayout; 
import java.awt.GridLayout; 

import javax.swing.*; 

public class TimerFoo extends JPanel { 
    public TimerFoo() { 
     JPanel centerPanel = new JPanel(new GridLayout(0, 2)); 
     centerPanel.add(new JButton("Foo")); 
     centerPanel.add(new JButton("Bar")); 

     JLabel bottomLabel = new JLabel("Bottom Label", SwingConstants.CENTER); 

     int gap = 5; 
     setLayout(new BorderLayout(gap, gap)); 
     setBorder(BorderFactory.createEmptyBorder(gap, gap, gap, gap)); 
     add(centerPanel, BorderLayout.CENTER); 
     add(bottomLabel, BorderLayout.PAGE_END); 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("TimerFoo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new TimerFoo()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
+0

@ user1988876: फिर लेआउट प्रबंधकों के बेहतर संयोजन का उपयोग करें। आपका ग्रिडलाउट केंद्र केंद्रित को रोक देगा। इसके बजाय अपने जेपीनल एक सीमावर्ती उपयोग का उपयोग करें। जेननेल घोंसला पर विचार करें। –

+0

मैंने 'बॉर्डरलाउट' के साथ शुरुआत की, लेकिन यह कुल spoiler –

+0

@ user1988876: '" कुल spoiler "' ??? इससे मुझे कुछ गलत संकेत मिलता है कि इसमें क्या गलत है। दोबारा, आप संभवतः अपने जेपीनल को घोंसले नहीं कर रहे हैं और इस प्रकार लेआउट घोंसले कर रहे हैं। –

2

JavaDoc of JLabel पढ़ें। इसमें कक्षा संरेखण सहित कक्षा और सभी एपीआई के लिए विवरण है।

5

आप इसे केंद्र के लिए इस का उपयोग क्षैतिज

labelVariable.setHorizontalAlignment(JLabel.CENTER); 
+0

यह एक अच्छा जवाब है, क्योंकि यह 'जेलाबेल' निजी है तो यह भी काम करता है। उस के लिए +1 :) – CodingNinja

2

आप उपयोग कर सकते हैं निम्नलिखित

jLabelvariable.setLocation((this.getWidth()-jLabelvariable.getWidth())/2,50); 

यहाँ 50 फ्रेम के ऊपर से लेबल की ऊंचाई है सकते हैं।

संबंधित मुद्दे