2013-02-03 5 views
0

DFA 관련 프로그램을 설계 중입니다. Q0 또는 Q1과 같은 물건을 원안에 넣고 싶습니다. 그러나 어떻게해야할지 모르겠습니다. 누군가 내 코드를보고 어떻게 말해 줄 수 있습니까? 직접 원에 게재 할 이름을 넣어하기 위해 가능하면 내가 JLabel를위한 하드 설정 위치를 생각하기 때문에, 그것은 좋은 것입니다 .. 여기 내 코드입니다 :JFrame에서 원 안에 라벨을 붙이는 방법은 무엇입니까?

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 


public class midterm extends JFrame 
{ 
    JPanel mainpanel; 
    JPanel gamepanel; 
    JPanel controls; 



    ExitButtonListener end=new ExitButtonListener(); 



    public midterm() 
    { 
     super("My DFA Design"); 
     setSize(700,700); 
     setLocation(400,100); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
     setResizable(false); 

     panel(); 
     this.getContentPane().add(mainpanel); 
     this.pack(); 
     setVisible(true); 
     setSize(400,400); 
    } 



    public static void main(String[] args) 
    { 
     midterm frame=new midterm(); 
    } 



    void panel() 
    { 
     mainpanel=new JPanel(); 
     mainpanel.setLayout(new BorderLayout()); 


     gamepanel=new JPanel(); 
     gamepanel.setBorder(BorderFactory.createTitledBorder("Deterministic Finite Automata")); 
     gamepanel.setLayout(new GridLayout(2,3)); 


     controls = new JPanel(); 
     controls.setLayout(new BorderLayout()); 
     controls.setBorder(BorderFactory.createTitledBorder("Control")); 

     JButton newGame = new JButton("Reset"); 
     newGame.addActionListener(new NewButtonListener()); 
     controls.add(newGame, BorderLayout.NORTH); 


     JButton exitGame = new JButton("Exit"); 
     exitGame.addActionListener(end); 
     controls.add(exitGame, BorderLayout.SOUTH); 

     mainpanel.add(gamepanel, BorderLayout.CENTER); 
     mainpanel.add(controls, BorderLayout.EAST); 

     mainpanel.setVisible(true); 

     q1 c1=new q1(); 
     q2 c2=new q2(); 
     q3 c3=new q3(); 
     gamepanel.add(c1); 
     gamepanel.add(c2); 
     gamepanel.add(c3);  

    } 


    class ExitButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      System.exit(0); 
     } 
    } 

    class NewButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 


     } 
    } 

    class q1 extends JPanel 
    { 
     final int radius=25; 
     public void paint(Graphics gr) 
     { 
      setBackground(Color.black); 
      gr.drawOval((100/2-radius),(100/2-radius), radius*2, radius*2); 
     } 
    } 

    class q2 extends JPanel 
    { 
     final int radius=25; 
     public void paint(Graphics gr) 
     { 
      setBackground(Color.black); 
      gr.drawOval((95/2-radius),(100/2-radius), radius*2, radius*2); 
     } 
    } 

    class q3 extends JPanel 
    { 
     final int radius=25; 
     public void paint(Graphics gr) 
     { 
      setBackground(Color.black); 
      gr.drawOval((250/2-radius),(50/2-radius), radius*2, radius*2); 
     } 
    } 


} 
+0

적절한 명명 규칙을 따르고 계급 이름을 대문자로 시작하십시오. 위치를 설정하는 데 문제가 있습니까? –

답변

1

가능한, 예, 좋습니다, 어쩌면을 하지 ...

enter image description here

public class TestLabel { 

    public static void main(String[] args) { 
     new TestLabel(); 
    } 

    public TestLabel() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      add(new CircleLable("1")); 
      add(new JLabel("What is the capital of SegWay?")); 
     } 

    } 

    public class CircleLable extends JLabel { 

     public CircleLable() { 
      init(); 
     } 

     public CircleLable(String text) { 
      super(text); 
      init(); 
     } 

     protected void init() { 
      setHorizontalAlignment(CENTER); 
      setVerticalAlignment(CENTER); 
      setBorder(new EmptyBorder(2, 2, 2, 2)); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      Dimension size = super.getPreferredSize(); 
      size.width = Math.max(size.width, size.height); 
      size.height = size.width; 
      return size; 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      Graphics2D g2d = (Graphics2D) g.create(); 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
      Insets insets = getInsets(); 
      int width = (getWidth() - (insets.left + insets.right)); 
      int height = getHeight() - (insets.top + insets.bottom); 
      int radius = Math.max(width, height); 

      int x = insets.left + ((width - radius)/2); 
      int y = insets.top + ((height - radius)/2); 

      g2d.drawOval(x, y, radius, radius); 

      super.paintComponent(g2d); 

      g2d.dispose(); 
     } 

    } 

} 

나는이 솔루션이 문제가

잘못 될 수있는 정도이다. 아이콘을 추가하고, 텍스트 정렬을 변경하면 효과가 없어집니다. 개인적으로

, 단순히 사용자 정의 JPanel을 사용하고 (구성 요소가 제 1 투명 것을 확인하는) 텍스트 내 자신을 렌더링,하지만

0

@MadProgrammer 생각이 더 ... 그냥 날,하지만 당신은 할 수 동그라미 번호는 dingbats을 사용하십시오. ➀, ➁, ➂, ...

관련 문제