![](/img/trans.png)
[英]Can I execute ActionListener method actionPerformed from other class methods?
[英]How to draw an object on a Frame from an actionPerformed() method of ActionListener class
我正在嘗試在ActionListener類的actionPerformed()方法內繪制Shape對象,並將其添加到InternalFrame中。
public class InternalFrame extends JInternalFrame{
public JSlider redSlider, greenSlider, blueSlider;
public TextField redField = new TextField();
public TextField greenField = new TextField();
public TextField blueField = new TextField();
Checkbox checkBox = new Checkbox("Filled", true);
String[] shapeNames = {"Oval", "Rectangle", "Line", "NewShape"};
public InternalFrame(String string, boolean b,
boolean c, boolean d, boolean e) {
super(string,b,c,d);
this.setLayout(new BorderLayout());
redSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32);
greenSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32);
blueSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 256, 32);
redField.setText(" " + redSlider.getValue());
greenField.setText(" " + greenSlider.getValue());
blueField.setText(" " + blueSlider.getValue());
redSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
redField.setText(" " + redSlider.getValue());
//System.out.println("red value: " + redSlider.getValue());
}
});
greenSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
greenField.setText(" " + greenSlider.getValue());
}
});
blueSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
blueField.setText(" " + blueSlider.getValue());
}
});
JPanel topPanel = new JPanel();
topPanel.setLayout(new GridLayout(1, 4, 6, 0));
JComboBox shapesDropDown = new JComboBox(shapeNames);
shapesDropDown.setSelectedIndex(0);
shapesDropDown.addActionListener(new ActionListener (){
@Override
public void actionPerformed(ActionEvent arg0) {
//if(arg0.getSource() == shapeNames[1] ){
MyShape myShape = new MyRectangle();
add(myShape, BorderLayout.CENTER);
System.out.println("HHHH");
//}
}
});
JPanel empty1 = new JPanel();
JPanel empty2 = new JPanel();
topPanel.add(empty1);
topPanel.add(shapesDropDown);
topPanel.add(checkBox);
topPanel.add(empty2);
JPanel sliderPanel = new JPanel();
sliderPanel.setLayout(new GridLayout(3, 3));
sliderPanel.add(new Label("Red:"));
sliderPanel.add(redSlider);
sliderPanel.add(redField);
sliderPanel.add(new Label("Green:"));
sliderPanel.add(greenSlider);
sliderPanel.add(greenField);
sliderPanel.add(new Label("Blue:"));
sliderPanel.add(blueSlider);
sliderPanel.add(blueField);
add(topPanel, BorderLayout.NORTH);
add(sliderPanel, BorderLayout.SOUTH);
}
}
形狀對象也正在創建,但是它沒有顯示在InternalFrame上。
不用擴展JInternalFrame
,而是使用工廠方法創建內部框架及其內容。 在此示例中 ,在構造函數中調用了createInternalFrame()
,但也可以從ActionListener
調用它。 注意,內部框架的默認布局是BorderLayout
,默認位置是CENTER
; 在調整容器的大小和可見性之前,請務必先pack()
容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.