2012-10-15 108 views
1

我有一個現有的圖形對象,我試圖在它上面添加一個JRadioButton。程序運行後,按鈕不會顯示,我想這是因爲沒有辦法將JPanel添加到Graphics對象。我將JRadiobutton添加到其相應的ButtonGroup中,然後將該按鈕添加到JPanel中,但我沒有看到任何方法在我的圖形對象頂部添加按鈕。將JRadioButton添加到圖形對象

有沒有辦法給圖形對象添加一個單選按鈕?繼續使用這個圖形對象是很重要的。讓我知道如果看到代碼會有所幫助,我想我只需要一個更好的方法來處理這個問題。

private void redrawTitle(Graphics gc) { 
    gc.setColor(Color.yellow); 
    gc.fillRect(0, 0, view_width, view_height); 
    gc.setFont(largeBannerFont); 
    FontMetrics fm = gc.getFontMetrics(); 
    gc.setColor(Color.red); 
    centerString(gc, fm, "Start", 100); 
    gc.setColor(Color.blue); 
    gc.setFont(smallBannerFont); 
    fm = gc.getFontMetrics(); 
    centerString(gc, fm, "by DavidVee", 160); 
    centerString(gc, fm, "a;lskdf", 190); 
    gc.setColor(Color.black); 
    centerString(gc, fm, "To start, select a skill level.", 250); 

    JRadioButton kruskalButton = new JRadioButton("Kruskal"); 
    ButtonGroup group = new ButtonGroup(); 
    group.add(kruskalButton); 
    JPanel panel = new JPanel(); 
    panel.add(kruskalButton); 

    centerString(gc, fm, "(Press a number from 0 to 9,", 300); 
    centerString(gc, fm, "or a letter from A to F)", 320); 
    centerString(gc, fm, "v1.2", 350); 
} 
+0

得到了一個工作例?? – MadProgrammer

+0

我剛剛在編輯中加入了它。 – davidVee

+0

這樣做意味着您將獲得單選按鈕的「快照」,它不會成爲工作組件。這不是如何將組件通常添加到容器 – MadProgrammer

回答

1

該方法將「漆」組件到供給圖形上下文,這是罷了「橡皮圖章」 /「快照」的組分,無相互作用將是可能的(沒有你編碼它你自己)...

public class PaintControls { 

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

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

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new PaintPane()); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class PaintPane extends JPanel { 

     private JRadioButton radioButton = new JRadioButton("I'm painted..."); 

     @Override 
     protected void paintComponent(Graphics g) { 

      super.paintComponent(g); 

      Graphics2D g2d = (Graphics2D) g.create(); 

      Dimension dim = radioButton.getPreferredSize(); 
      int x = (getWidth() - dim.width)/2; 
      int y = (getHeight() - dim.height)/2; 

      radioButton.setBounds(x, y, dim.width, dim.height); 

      g2d.translate(x, y); 
      radioButton.printAll(g); 
      g2d.translate(-x, -y); 

      g2d.dispose(); 
     } 
    } 
} 

新內容添加到父窗格中,使用容器的「添加」方法,但是,在paintXxx方法中不這樣做......

+0

謝謝。這會創建一個單獨窗口中的按鈕。有沒有辦法創建一個實際上是由圖形創建的屏幕的一部分的按鈕?或者,這只是不是如何使用圖形? – davidVee

+0

僅爲每個頂級容器創建圖形上下文。你想做什麼? – MadProgrammer

+0

我正在嘗試在圖形對象正在生成的屏幕中添加一個按鈕(最好是單選按鈕)。 – davidVee