import javax.swing.*
import java.awt.*
import java.awt.event.*
public class colorChange extends JFrame
{ JButton jbutton //定义按钮
Container content //定义容器窗口
public colorChange(){
content=getContentPane()//获取当前窗口的内容窗口
content.setLayout(new FlowLayout())//设置当前的布局方式为流式布局
content.setBackground(Color.GREEN)//设置当前窗口的背景颜色
jbutton=new JButton("改变窗口颜色")//创建一个按钮
jbutton.setBounds(20,20,100, 100)
jbutton.addActionListener(new CChange())//为按钮添加事件
content.add(jbutton) //将按钮添加到内容窗口上
setTitle("单击事件测试")//设置窗口标题
setSize(300,300)//设置窗口显示尺寸
setVisible(true)//设置窗口是否可见(true可见,false不可见)
}
class CChange implements ActionListener{
//CChange类继承按钮事件ActionEvent的ActionListener监听器接口。
public void actionPerformed(ActionEvent e){ //事件的默认方法
content.setBackground(Color.blue)//改变当前窗口的背景颜色
setSize(400,300)//设置当前窗口的大小
}
}
public static void main(String[] args)
{
new colorChange() //创建一个实例化对象
}
}
这个问题随便怎么搞都行啊,无非也就是代码好看与否,架构是否合适的问题。我写了个测试程序,图片还是留给你自己解决吧。我的程序运行会有一个主窗口,中心是一个JLabel,显示你的用户名,底下一个按钮,点击之后d出一个框,d出框包含一个下拉框,你可以选择需要修改的用户名,选择完毕后点大叉关闭,这时候主窗口的用户名就变掉了(确认按钮不做了,这个不是重点)。
因为我不知道你在整个流程中哪里遇到了问题,所以知道写了完整的代码。不过缺点就是你看起来也略麻烦。这里的关键问题是,d出框相当于另一个程序,你只要把用户在这里选择的值以某种方式记录下来即可。
我唯一要给你的建议是,不要用JFrame,用JDialog,从名字上就看出来,后者是对话框。如果你要修改信息,那么从业务上讲,也更接近于对话框,JFrame则更多的用于主窗口。JDialog的好处在于,它允许你设置modal属性以及父窗口,这样一来,你就不必担心对话框什么时候被关闭。JDialog的setVisible方法是会阻塞的,知道这个窗口消失或者被废弃。相似的例子你可以参考JFileChooser,你可以看为什么调用JFileChooser.showOpenDialog可以返回给你选择的文件,和你这里的逻辑是一样的。
import java.awt.BorderLayout
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.awt.event.ItemEvent
import java.awt.event.ItemListener
import javax.swing.JButton
import javax.swing.JComboBox
import javax.swing.JDialog
import javax.swing.JFrame
import javax.swing.JLabel
public class DummyTest {
public static void main(String[] args) {
final JFrame mainFrame = new JFrame()
final JLabel nameLabel = new JLabel()
nameLabel.setText("Default Name")
mainFrame.add(nameLabel, BorderLayout.CENTER)
JButton button = new JButton()
button.setText("Change Name")
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
nameLabel.setText(showDialog(mainFrame))
}
})
mainFrame.add(button, BorderLayout.SOUTH)
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
mainFrame.setSize(400, 400)
mainFrame.setVisible(true)
}
private static String showDialog(JFrame mainFrame) {
Object[] names = new Object[] { "Name1", "Name2", "Name3", }
final NameSelectionDialog dialog = new NameSelectionDialog(
mainFrame, names[0].toString())
final JComboBox combo = new JComboBox(names)
combo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
dialog.selectedName = combo.getSelectedItem().toString()
}
})
dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
dialog.add(combo)
dialog.pack()
dialog.setVisible(true)
return dialog.selectedName
}
static class NameSelectionDialog extends JDialog {
String selectedName = null
NameSelectionDialog(JFrame owner, String initName) {
super(owner, true)
selectedName = initName
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)