在另一个类的单选按钮上获取文本值

时间:2013-12-27 23:54:13

标签: java swing graphics jframe jpanel

我想从另一个类中获取buttongrup上的单选按钮文本进行绘画。  我创建一个对象并调用字符串无线电但出错。怎么了?

import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;



public class Demo extends JFrame{

 /**
 * 
 */
private static final long serialVersionUID = 1L;

public Demo(){

     getContentPane().add(new Panelalt(),BorderLayout.SOUTH);
     getContentPane().add(new Panelust(),BorderLayout.NORTH);

 }

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

  static void createAndShowGUI() {

    Demo f = new Demo();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(new Panelust());
    f.setPreferredSize(new Dimension(300,300));
    f.setBounds(100, 100, 300, 300);
    f.pack();
    f.setVisible(true);
}
}

class Panelalt extends JPanel  {
JComboBox numbers ;
private JRadioButton rectangle;
 private JRadioButton line;
 private JRadioButton circle;
 private JRadioButton square;
  ButtonGroup grup;
  JLabel number;
JButton draw ;
int gotnumber;
int gotheight;
int gotwidth;

String radio="";


public Panelalt(){
    grup = new ButtonGroup();

     rectangle = new JRadioButton("Rectangle");
       rectangle.setActionCommand("Rectangle");
      square = new JRadioButton("Square");
      square.setActionCommand("Square");
       line = new JRadioButton("Line");
       line.setActionCommand("Line");
       circle = new JRadioButton("Circle");
      circle.setActionCommand("Circle");
      rectangle.setSelected(true);
      JButton draw = new JButton("Draw");

      grup.add(circle);
       grup.add(line);
       grup.add(rectangle);
       grup.add(square);


       draw.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {


                radio=grup.getSelection().getActionCommand();
            }
        });

}

   }
 class Panelust extends JPanel{
Panelalt user = new Panelalt();

public Panelust(){

}

被称为其他类obj。这里

public void paint(Graphics g){
        super.paintComponent(g);
        if(user.radio.equals("Rectangle")){
        g.drawRect(10, 10, 100, 100);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

首先阅读;

所以你可以欣赏Swing中绘画是如何完成的。

接下来,让您的Drawing课程从JPanel延伸并覆盖它的paintComponent方法(而不是paintComponents方法,这完全不同)

使用此类仅执行自定义绘制,不要向其添加任何控件。提供适当的制定者和吸气剂,以控制被涂漆的东西。

为自己创建一个新的JPanel并将控件添加到此处。

将这两个面板添加到JFrame

的实例中

有很多理由说明你应该这样做......

  • JFrame这样的顶级容器不是双缓冲的,这意味着重绘会闪烁,因此您希望避免覆盖paint方法。
  • 绘画是链式方法调用的复杂系列,没有充分理由打破绘画链的任何部分会导致你进入一个痛苦的世界(当你撕裂你的头发试图弄清楚出了什么问题)
  • 绘制到已经有组件的组件上将最终在组件下面进行绘制。即使您尝试覆盖paint,因为单个组件可以在不通知父容器的情况下重新绘制,但它们似乎会“弹出”您绘制的内容。