我想从另一个类中获取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);
}
}
}
答案 0 :(得分:1)
首先阅读;
所以你可以欣赏Swing中绘画是如何完成的。
接下来,让您的Drawing
课程从JPanel
延伸并覆盖它的paintComponent
方法(而不是paintComponents
方法,这完全不同)
使用此类仅执行自定义绘制,不要向其添加任何控件。提供适当的制定者和吸气剂,以控制被涂漆的东西。
为自己创建一个新的JPanel
并将控件添加到此处。
将这两个面板添加到JFrame
。
有很多理由说明你应该这样做......
JFrame
这样的顶级容器不是双缓冲的,这意味着重绘会闪烁,因此您希望避免覆盖paint
方法。paint
,因为单个组件可以在不通知父容器的情况下重新绘制,但它们似乎会“弹出”您绘制的内容。