当我提交一个按钮时,我想通过一个名为的方法以编程方式显示JColorChooser和JFileChooser对话框。
单击该按钮后,该方法将被调用,但对话框不会显示。
我有一个具有空布局(绝对定位)的JFrame,例如,下面的代码:
public class _TEST_ extends JFrame
{
private JColorChooser color_chooser;
private JFileChooser file_chooser;
public _TEST_()
{
super("_TEST_");
setLayout(null);
final JButton b = new JButton("Color chooser");
final JButton b2 = new JButton("File chooser");
ActionListener al = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == b)
{
createJColorChooser();
}
else if (e.getSource() == b2)
{
createJFileChooser();
}
}
};
b.addActionListener(al);
b2.addActionListener(al);
b.setBounds(1, 1, 160, 20);
b2.setBounds(1, 30, 160, 20);
add(b);
add(b2);
}
public void createJColorChooser()
{
color_chooser = new JColorChooser();
color_chooser.setBounds(1, 70, 225, 50);
add(color_chooser);
repaint();
}
public void createJFileChooser()
{
file_chooser = new JFileChooser();
file_chooser.setBounds(330, 70, 225, 50);
add(file_chooser);
repaint();
}
public static void main(String args[])
{
_TEST_ window = new _TEST_();
window.setSize(800, 600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
window.setLocationRelativeTo(null);
}
}怎么了?
发布于 2010-09-30 18:10:54
如果要添加到已变为可见的框架,则需要重新验证该框架:
frame.validate();从frame.add的JavaDocs (...):
注意:如果已将组件添加到已显示的容器中,则必须在该容器上调用validate才能显示新组件。
如果要使颜色选择器显示在单独的对话框中(通常的方法),请执行以下操作:
final Color color = JColorChooser.showDialog(null, "Choose a color", Color.BLUE); 对于JFileChooser,这里是一个典型的方法:
JFileChooser ch = new JFileChooser();
ch.showOpenDialog(null);这两个对话框的JavaDocs都有很好的工作示例。
发布于 2010-09-30 22:39:25
通常,我会将组件添加到特定的面板中,而不是直接添加到框架中,因此我将使用:
panel.add( someComponent );
panel.revalidate();
panel.repaint(); // sometimes required但在这种情况下,您可以只使用validate()方法:
color_chooser.setSize( color_chooser.getPreferredSize() );
add(color_chooser);
validate();
repaint();
file_chooser.setSize( file_chooser.getPreferredSize() );
add(file_chooser);
validate();
repaint(); 编辑:当然,您还应该使用组件的首选大小,以便整个组件可见。现在,您需要做的就是添加所有代码,以便在用户做出选择时进行响应。这是大量的工作,这就是为什么使用每个类的对话框版本更好。
发布于 2010-10-01 00:06:56
(有关上下文,请参阅@Steve McLeod的answer中的评论。)
JColorChooser和JFileChooser不是普通的JComponent,你可以将它们添加到容器中,但是你看不到任何东西,因为JColorChooser的UI不会绘制,而JFileChooser甚至没有UI。
在Steve的回答中,您可以使用JColorChooser#showDialog和JFileCHooser#showOpenDialog来获取模式对话框,这是正确使用它们的方式。
如果您确实需要,可以调用JColorChooser#createDialog,然后获取它的内容窗格(您可以对任何顶级容器执行此操作):
public void createJColorChooser()
{
...
add(JColorChooser.createDialog(this, "", false, color_chooser, null, null).getContentPane());
...
}你可以重写JFileChooser来公布它的createDialog,但是请不要这样做。文件选择器应该始终是模式对话框。
https://stackoverflow.com/questions/3829568
复制相似问题