1

既存のグラフィックス オブジェクトがあり、その上に JRadioButton を追加しようとしています。プログラムを実行すると、ボタンが表示されません。これは、Graphics オブジェクトに JPanel を追加する方法がないためだと思います。JRadiobutton を適切な ButtonGroup に追加してから、そのボタンを JPanel に追加しましたが、グラフィック オブジェクトの上にボタンを追加する方法は見当たりませんでした。

グラフィックス オブジェクトにラジオ ボタンを追加する方法はありますか? このグラフィック オブジェクトを使い続けることが重要です。コードが役立つかどうか教えてください。これにアプローチするためのより良い方法が必要だと思います。

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);
}
4

1 に答える 1

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メソッド内でこれを行わないでください...

于 2012-10-15T02:52:14.340 に答える